Visualizzazione dei risultati da 1 a 10 su 10

Discussione: [mysql] problema query

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    141

    [mysql] problema query

    Ho una tabella con i campi anagrafici e nickname degli utenti (tabella utenti) e una tabella foto con le foto di alcuni utenti (tabella foto).
    Vorrei stampare il nickname di tutti gli utenti e di quelli che hanno la foto stampare anche la foto.
    Ho fatto questa query:
    "select * ,max(url_foto) from utenti u left join foto f on (f.nickname=u.nickname) group by u.nickname";
    ma c'è un probelma: per chi ha la foto funziona bene, per gli utenti che non hanno la foto non mi stampa il nickname.

  2. #2
    temo che il join crei una tabella temporanea con tutte le tuple che soddisfano la condizione di join... ovvero tutte le tuple di entrambe le tabelle tali che...f.nickname=u.nickname il problema è che se un utente non ha foto non esiste nessun f.nickname corrispndente e quindi viene scartata quella tupla.

    mi sa che ti tocca fare due query distinte per nick e foto.



  3. #3
    A me non quadra molto la max che hai dentro.... come mai la usi e raggruppi su un'altro campo.
    Il fatto che se un utente non ha una foto non dovrebbe dare problemi perchè usi una left quindi traducendo estrai tutti i record che sono in utenti affiancando quelli di foto, nel caso in cui foto non ci sia metti null...
    Non conoscendo la struttura delle tabelle è un po' comlicato.
    Cosa succede se togli la max ed il group by?

  4. #4
    Originariamente inviato da gigioland
    Il fatto che se un utente non ha una foto non dovrebbe dare problemi perchè usi una left quindi traducendo estrai tutti i record che sono in utenti affiancando quelli di foto, nel caso in cui foto non ci sia metti null...



  5. #5
    Sembra un pò strana come query, mi riferisco al 'max'.

    Come ha già detto }gu|do[z]{®©, la query non può soddisfare le tue richieste.
    Infatti si tratta di una outer join, nel tuo caso devi usare una inner join, la quale stampa i record di tutti gli utenti anche se non hanno foto.

    Ciao

  6. #6
    }gu|do[z]{®© ?????

    No la inner join pretende che i dati siano presenti in entrambe le tabelle... per quanto riguarda la outer se dovessero esserci dei dati mancanti mette null...

  7. #7
    No la inner join pretende che i dati siano presenti in entrambe le tabelle... per quanto riguarda la outer se dovessero esserci dei dati mancanti mette null...

    Ops.

    E' vero scusa, mi sono confuso

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    141
    il max l'ho usato perchè ogni ytente può evere piu foto, se non metto max, mi ripete ogni utente tante volte quante sono le sue foto. Se uso l'inner join non mi stampa gli utenti che non hanno foto, se uso la outer mi stampa utenti nulli (e non posso farlo), credo che l'unico modo sia il left join, ma mi da l'errore descritto nel mio primo messaggio.

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    141
    parte del codice è questo:
    $query = "select * ,max(url_foto) from utenti u left join foto f on (f.nickname=u.nickname) group by u.nickname";
    $result = mysql_query($query, $db);
    while ($row = mysql_fetch_array($result))
    {
    ?>

    <div id="utenti">

    <div id="pulsanti">
    [img]img11/<?=$row['url_foto']?>[/img]
    </div>

    <div id="pulsante">

    <div id="sinistra"> <font color="#FF0000">NOME:</font> <? echo $row['nickname'];?>



    Il problema potrebbe essere nell'ultima riga del codice: <? echo $row['nickname'];?>

  10. #10
    Devi specificare quale nickname vuoi usare probabilmente, prova così :
    codice:
    select *, u.nickname as nick, max(url_foto)
    from utenti u 
    left join foto f 
    on (f.nickname=u.nickname) 
    group by u.nickname
    e poi stampi $row['nick']
    Ma sei sicuro che sia necessario il max, in teoria dovrebbe fuzionare senza.
    dA .. foto di viaggio
    L'esperienza è il tipo di insegnante più difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

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.