Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di Trinità76
    Registrato dal
    Jan 2002
    Messaggi
    1,439

    [MySql] Ancora un CONCAT_WS()

    Codice PHP:
    SELECT CONCAT_WS (" "manag.Nomemanag.Cognome) AS NomeCognome,
      
    managementphoto.ID_management,
      
    manag.a,
      
    manag.Cognome,
      
    manag.Nome,
      
    manag.b,
      
    manag.c
    FROM
      manag
      LEFT OUTER JOIN managementphoto ON 
    (manag.ID managementphoto.ID_management)
      
    WHERE NomeCognome LIKE '%nome cognome%'
    Mi da You have an error in your Sql syntax...
    dov'è che sbaglio?

    In pratica devo selezionare un dato nome e cognome selezionando la concatenazione dei campi nome e cognome...
    わさび

  2. #2
    Semplicemente non puoi usare un alias delle colonne nel WHERE, perche' il WHERE viene risolto prima delle colonne. Al momento della risoluzione l'alias ancora non esiste.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it L'avatar di Trinità76
    Registrato dal
    Jan 2002
    Messaggi
    1,439
    ...e come recupero il dato derivante dal concat_ws?
    devo creare una temporary_table?
    わさび

  4. #4
    [supersaibal]Originariamente inviato da Trinità76
    ...e come recupero il dato derivante dal concat_ws?
    devo creare una temporary_table? [/supersaibal]
    Il dato lo recuperi normalmente con l'alias come fosse una qualsiasi colonna. E' nella condizione WHERE che non lo puoi usare, perche' ancora non esiste in quel momento. Dovrebbe darti errore di colonna inesistente.

    Ma il concatenare solo nome e cognome non e' che porta ad un miglioramento complessivo della query. Anzi, vedo che poi estrai lo stesso nome e cognome. Potresti pero' usare l'alias nell'ordinamento:

    ORDER BY NomeCognome .... che e' ==== a ORDER BY Nome, Cognome


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it L'avatar di Trinità76
    Registrato dal
    Jan 2002
    Messaggi
    1,439
    [supersaibal]Originariamente inviato da piero.mac
    Il dato lo recuperi normalmente con l'alias come fosse una qualsiasi colonna. E' nella condizione WHERE che non lo puoi usare, perche' ancora non esiste in quel momento. Dovrebbe darti errore di colonna inesistente.

    Ma il concatenare solo nome e cognome non e' che porta ad un miglioramento complessivo della query. Anzi, vedo che poi estrai lo stesso nome e cognome. Potresti pero' usare l'alias nell'ordinamento:

    ORDER BY NomeCognome .... che e' ==== a ORDER BY Nome, Cognome

    [/supersaibal]
    Grazie delle delucidazioni,
    ora vedo che se po' fa ^_^
    わさび

  6. #6
    Utente di HTML.it L'avatar di Trinità76
    Registrato dal
    Jan 2002
    Messaggi
    1,439

    quasi risolto...

    Avrei risolto quasi tutto con la temporary table ma alla fine quando ci faccio su un inner join mi dice:
    Unknown table 'temporary_table' in on clause
    .

    In pratica, ho creato una temporary_table ...
    Codice PHP:
    CREATE TEMPORARY TABLE IF NOT EXISTS `temporary_table` ( 
            `
    IDint(11UNSIGNED default NULL,
            `
    NomeCognomeVARCHAR(250) default NULL
            
    TYPE=MyISAM
    ...ficcandoci dentro tutte voci univoche di nomi e cognomi concatenati in una sola colonna che ho precedentemente inserito in un array
    Codice PHP:
    $sql "INSERT INTO `temporary_table` (`temporary_table`.`NomeCognome`) VALUES (\"$array_community[$i]\")"
    ...e fin qui tutto ok.

    Ora devo fare la INNER JOIN con il CONCAT_WS, ma mi da l'errore che ho scritto su
    codice:
    SELECT blablabla.a, blablabla.b, manag.Nome, manag.Cognome
    		FROM comunicati
    		LEFT JOIN manag ON (temporary_table.NomeCognome = CONCAT_WS(\" \",  manag.Nome, manag.Cognome))
    		WHERE (comunicati.title IS NOT NULL)
    		ORDER BY Cognome ASC;
    わさび

  7. #7
    Per saperti dare una risposta bisognerebbe conoscere l'obiettivo che vuoi raggiungere ed i mezzi disponibili (tabelle e campi) cosi' dare una risposta diventa molto difficile. Perche' devi concatenare, perche' devi fare una tabella temporanea.... perche' ...perche' ..ecc..ecc.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8
    Utente di HTML.it L'avatar di Trinità76
    Registrato dal
    Jan 2002
    Messaggi
    1,439
    [supersaibal]Originariamente inviato da piero.mac
    Per saperti dare una risposta bisognerebbe conoscere l'obiettivo che vuoi raggiungere ed i mezzi disponibili (tabelle e campi) cosi' dare una risposta diventa molto difficile. Perche' devi concatenare, perche' devi fare una tabella temporanea.... perche' ...perche' ..ecc..ecc. [/supersaibal]
    Hai ragione...
    Dunque:
    Ho una tabella in cui ho un campo con dei nomi e cognomi e un campo con degli articoli. Alcune di queste persone sono registrate nel database e hanno altri dati, mentre altre invece no. Io dovrei tirare fuori tutti i nominativi (di tutte le persone), e quando queste sono registrate tirare fuori anche i valori delle altre tabelle.
    Per cui ho fatto:
    una prima query che mi tira fuori tutti gli articoli di un certo tipo con i nomi delle persone (field autore1 e autore2 => a un articolo possono corrispondere una o due persone).
    In php metto in un array tutti i nominativi controllando di non inserire due volte lo stesso nome (perchè una persona può scrivere + articoli).
    Dopodicchè creo una temporary table e ci ficco tutti i nomi dell'array.
    E a questo punto devo fare la left join tirando fuori i nomi delle persone non registrate e i nomi delle persone registrate con i relativi articoli e altri dati.

    Lo so, il database è una schifezza, ma purtroppo non dipende da me, perchè è stato fatto da una persona prima di me... andrebbe azzerato...
    ...però per il momento sono costretto a fare degli stratagemmi in php per "risolvere" temporaneamente il problema...
    わさび

  9. #9
    Complicata la cosa....

    per tornare all'errore... non includi la temporary_table ... (potevi chiamarla pippo che era meglio)....
    codice:
    SELECT blablabla.a, blablabla.b, manag.Nome, manag.Cognome
    FROM comunicati, manag
    LEFT JOIN temporary_table ON temporary_table.NomeCognome = CONCAT_WS(\" \",  manag.Nome, manag.Cognome)
    WHERE comunicati.title IS NOT NULL
    ORDER BY Cognome ASC;
    con tutti i benefici di inventario e anche qualcosa in piu'...


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  10. #10
    Utente di HTML.it L'avatar di Trinità76
    Registrato dal
    Jan 2002
    Messaggi
    1,439
    Grazie ancora per l'aiuto,
    ci lavoro un po' su e poi ti faccio sapere...
    ...al momento non mi genera nessun messaggio di errore, ma l'esecuzione della pagina impiega un tempo allucinante (senza terminare)...
    quindi probabilmente dovrò rivedermi i while e le altre istruzioni...
    a dopo
    わさび

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.