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

    [MySQL] Left Join Limit

    Ciao a tutti,

    Ho una query abbastanza complessa, con un left join che controlla la presenza o meno, su di una tabella, di record con un determinato valore.

    Il problema è che a me interesserebbe sapere solo se sono presenti record, invece utilizzando il left join, per ogni record trovato sulla tabella linkata, mi crea un nuovo risultato, così vorrei che venisse selezionato solo il primo trovato e non tutti.

    Come posso svolgere questa operazione ?

    Grazie 1000
    SGr33n

  2. #2
    limit 1

    dovrebbe bastare.

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

  3. #3
    posizionato dove ? alla fine poi non ottengo gli altri record che invece mi servono
    SGr33n

  4. #4
    Originariamente inviato da SGr33n
    posizionato dove ? alla fine poi non ottengo gli altri record che invece mi servono
    e allora diciamo che non si capisce la domanda iniziale...

    Il problema è che a me interesserebbe sapere solo se sono presenti record, invece utilizzando il left join, per ogni record trovato sulla tabella linkata, mi crea un nuovo risultato, così vorrei che venisse selezionato solo il primo trovato e non tutti.
    che vuoi dire???

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

  5. #5
    Grazie dell'interessamento piero, ora mi spiego meglio:

    Ho due tabelle: thread e replies

    Ora nella ricerca di threads ho inserito un left join per la ricerca di replies relative all'utente loggato, esempio:

    SELECT thread.*, replies.postid AS replied FROM thread LEFT JOIN (replies) ON (replies.threadid = thread.threadid AND replies.userid = $loggeduser)

    Ora se l'utente non ha risposto alla discussione replied = NULL, in caso contrario mi ritorna tante volte lo stesso thread quante sono le risposte che ha inviato l'utente (replies.postid).

    Ciò che vorrei evitare è proprio questo, vorrei ricevere sempre solo un solo thread, e sapere se ci sono o meno replies.

    Spero di essermi spiegato meglio ora, come posso risolvere ?
    Grazie
    SGr33n

  6. #6
    sono record joinati... se ne ricevi uno devi ricevere tutto il record.

    fai un controllo con il php. Se il campo e' uguale al precedente salti il contenuto che no ti serve.

    es. (parlato) :

    codice:
    $id_thread = 0;
    
    fai la tua query:
    
    while($row = mysql_fetch_assoc($resource) ) {
    
       if($id_thread == $row['id']) allora stampi il thread + la replica
           else stampi solo la replica
    
    $id_thread = $row['id'];
    }
    in questo modo se il thread e' uguale al precedente stampa solo la replica...


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

  7. #7
    Grazie, il problema è che i record sono sottoposti anche a paginazione per cui non posso effettuare il controllo postumo.

    Magari risolverò con l'esecuzione del controllo a parte.

    Grazie piero
    SGr33n

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    595
    GROUP BY può servirti?

    SELECT thread.*, count(thread.threadid)
    FROM thread
    LEFT JOIN (replies)
    ON (replies.threadid = thread.threadid AND replies.userid = $loggeduser)
    GROUP BY thread.threadid

    in questo modo dovresti avere una sola riga per ogni threadid e in count(thread.threadid) hai anche il numero di replies fatte dall'utente

    Prova un po'

  9. #9
    Grazie allora ci provo subito... ma non c'è un modo per bloccare anche la ricerca al primo risultato trovato? non vorrei appesantire troppo la query in questo modo.
    SGr33n

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    595
    Quello si ottiene con "limit 1" ma avevi detto che volevi più risultati...

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.