Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    Select Distinct a più campi

    Ciao a tutti, ho un problema con l'espressione SQL e il passaggio dei dati al php su un select distinct con più campi.
    Mi spiego meglio :

    Ho una tabella con 3 campi di cui voglio tirare fuori solo un valore univoco tra i 3 campi.

    Campo 1 - Campo 2 - Campo 3
    A1 B1 A3
    C1 A1 A2
    A3 A1 A2

    Voglio che la stringa SQL faccia il controllo su tutte e 3 le colonne e mi ritorni solo i valori che hanno "A" come inizio.

    $query = "SELECT DISTINCT (Campo 1, Campo 2, Campo 3) FROM tabella WHERE Campo 1 LIKE \"A%\" OR Campo 2 LIKE \"A%\" OR Campo 3 LIKE \"A%\" ";
    Ora la prima domanda : si può ordinare questa select in modo tale che mi ritorni a video questo? :
    A1
    A2
    A3

    Seconda domanda :
    Per far venire fuori questa cosa sopra ho provato a fare un ciclo while così :

    Codice PHP:
    $result mysql_query($query$db); 
    while (
    $row mysql_fetch_array($query)) { 
    print 
    " \"$row\" 
     "
    ;

    Cerco di argomentare :
    Alla variabile $result faccio fare il controllo tra la query sql e il mio database (la variabile $db è funzionante e già precedentemente impostata).
    Il ciclo while, nel quale assegno alla variabile $row la suddivisione dei risultati del select (penso sia qui l'errore...).
    Infine scrivo a video il risultato che dovrei ottenere facendolo andare a capo per ogni volta.
    Anche qui la domanda è : richiamare la variabile $row in questo modo penso mi faccia venire fuori "Array" e non il risultato che vorrei ottenere; perché? Ma soprattutto in che modo potrei ottenere li risultato sperato?

    Grazie a tutti per l'aiuto, se c'è già una discussione di questo tipo mi spiace per il doppio inserimento ma ho provato a cercarla senza successo.

    Grazie.

  2. #2
    $row è un array che contiene tgutti i campi di un record. per sincerartene prova così:

    $result = mysql_query($query, $db);
    while ($row = mysql_fetch_array($query)) print _r($row);

    a video vedrai gli array di ogni record; quindi regolati di conseguenza.

  3. #3
    Anzitutto Grazie,

    Ho provato a fare la modifica come mi hai detto te, SQL da errore :

    Codice PHP:
    Warningmysql_fetch_array(): supplied argument is not a valid MySQL result resource in lista.php on line 15 
    La linea 15 è la mia linea
    Codice PHP:
    while ($row mysql_fetch_array($query)) 
    direi che l'errore è proprio nei dati che SQL invia alle variabili PHP...

  4. #4
    verissimo non me ne ero accorto..la riga giusta è

    $result = mysql_query($query, $db);
    while ($row = mysql_fetch_array($result)) print _r($row);


  5. #5
    Continua a darmi sempre lo stesso errore di prima.

    Posso dirti che non mi da errore e anzi mi fa vedere i campi A% se il SELECT DISTINCT invece che farlo su (Campo 1, Campo 2, Campo 3) lo faccio su (Campo 1).

    In poche parole mi stampa :

    Codice PHP:
    Array ( [0] => A1 [Campo 1] => A1 ) Array ( [0] => C1 [Campo 1] => C1 )  Array ( [0] => A3 [Campo 1] => A3 
    Perché prende si tutti i valori che stanno nei campi del WHERE ma prende solo quelli del Campo 1

    Il problema è sulla presa di più dati dell'array...

    Idee?

  6. #6
    Faccio un update perché ho risolto parte della cosa.

    Sono finalmente riuscito a fargli prendere i dati che mi servono, però non so come farglieli stampare in maniera decente.
    Per ora con il seguente codice :

    Codice PHP:
    $select $_GET[link];
    $query "
    (SELECT DISTINCT Campo 1 FROM tabella WHERE Campo 1 LIKE \"
    $select%\") UNION 
    (SELECT DISTINCT Campo 2 FROM tabella WHERE Campo 2 LIKE \"
    $select%\") UNION
    (SELECT DISTINCT Campo 3 FROM tabella WHERE Campo 3 LIKE \"
    $select%\")";
    $result mysql_query($query$db);
    while (
    $row mysql_fetch_array($result))
    print_r($row); 
    mi stampa questo :
    Codice PHP:
    Array ( [0] => A1 [Campo 1] => A1 ) Array ( [0] => A3 [Campo 2] => A3 ) Array ( [0] => A2 [Campo 3] => A2 
    Ora io ovviamente non vorrei questa stampa ma bensì vorrei un :
    A1
    A2
    A3

    Il problema è che non so né come mettere i vari risultati in ordine (l'idea è un ORDER BY nella query ma siccome i campi sono 3 non so come fare...)

    né tantomeno come fare a fargli stampare all'interno del ciclo di while i risultati in questo modo.

    Ho provato con $row, '$row' e "$row" e anche con $row[], '$row[]' e "$row[]";
    ma nei primi 3 casi ho risultato : Array,Array,Array poi 'Array','Array','Array' e "Array","Array","Array", mentre negli altri tre non mi passa proprio il dato ma questo è corretto perché non ha un riferimento all'interno del [].

    Devo mettere qualcosa all'interno di quel []?

    Sperando di avere spiegato il + possibile, ringrazio.

  7. #7
    Codice PHP:
    ....
    while (
    $row mysql_fetch_row($result)) {

    echo 
    $row[0] . "
    "
    ;



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

  8. #8
    Originariamente inviato da piero.mac
    Codice PHP:
    ....
    while (
    $row mysql_fetch_row($result)) {

    echo 
    $row[0] . "
    "
    ;


    1) Non ti ringrazierò mai abbastanza, se hai tempo mi potresti spiegare anche il perché?

    2) Rimane il problema dell'ordinamento : Non so se facendo l'UNION in quel modo come posso fare un ORDER BY? Devo utilizzare un altro sistema?

    Grazie ancora...

  9. #9
    non e' molto chiaro quello che vorresti fare. Sempre tenendo come esempio il campo A(n) potresti avere il valore A(n) in tre campi diversi dello stesso record. Cosa fai se ci sono piu' campi A nello stesso record?

    Tanto per fare un esperimento prova cosi':


    Codice PHP:
    $query "
    ((SELECT DISTINCT Campo1, 1 as ciccio FROM tabella WHERE Campo1 LIKE \"
    $select%\") 
    UNION
    (SELECT DISTINCT Campo2, 2 as ciccio FROM tabella WHERE Campo2 LIKE \"
    $select%\") 
    UNION
    (SELECT DISTINCT Campo3, 3 as ciccio FROM tabella WHERE Campo3 LIKE \"
    $select%\"))
    ORDER BY ciccio"


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

  10. #10
    Originariamente inviato da piero.mac
    non e' molto chiaro quello che vorresti fare. Sempre tenendo come esempio il campo A(n) potresti avere il valore A(n) in tre campi diversi dello stesso record. Cosa fai se ci sono piu' campi A nello stesso record?

    Tanto per fare un esperimento prova cosi':


    Codice PHP:
    $query "
    ((SELECT DISTINCT Campo1, 1 as ciccio FROM tabella WHERE Campo1 LIKE \"
    $select%\") 
    UNION
    (SELECT DISTINCT Campo2, 2 as ciccio FROM tabella WHERE Campo2 LIKE \"
    $select%\") 
    UNION
    (SELECT DISTINCT Campo3, 3 as ciccio FROM tabella WHERE Campo3 LIKE \"
    $select%\"))
    ORDER BY ciccio"

    Si, hai ragione è poco chiaro...

    Vedo di fare un esempio più chiaro :

    Campo 1 - Campo 2 - Campo 3
    Alessandro - Giacomo - Antonio
    Roberto - Alessandro - Antonio
    Alessandro - Alessandro - Filippo

    Io voglio selezionare solo i valori con "A" e metterli in ordine, quindi dovrebbe venirmi fuori una cosa tipo :

    Alessandro
    Antonio

    come output.

    Più chiaro?

    Grazie...

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 © 2025 vBulletin Solutions, Inc. All rights reserved.