Sto cercando di creare una pagina di notizie per un sito Web su cui sto lavorando. Ho deciso di utilizzare le query MySQL corrette (ovvero COUNT (id) e join invece di più query o num_rows.) Sto usando un wrapper PDO, che dovrebbe funzionare correttamente, e questo non riesce ancora quando viene eseguito direttamente attraverso Applicazione CLI MySQL.MySQL Multiple Left Joins
Fondamentalmente, ho 3 tabelle. Uno tiene la notizia, uno tiene i commenti e uno tiene gli utenti. Il mio obiettivo qui è quello di creare una pagina che mostri tutti (impaginerà in seguito) i titoli di notizie, corpi, autori e date. Questo ha funzionato bene quando ho usato una seconda query per ottenere il nome utente, ma poi ho deciso che preferirei usare un JOIN.
Quindi qual è il problema? Bene, ho bisogno di due join. Uno è quello di ottenere il nome utente dell'autore e l'altro per ottenere il numero di commenti. Quando scelgo semplicemente il nome utente dell'autore, tutto funziona come previsto. Vengono visualizzate tutte le righe (ci sono 2) nella tabella delle notizie. Tuttavia, quando ho aggiunto questo secondo LEFT JOIN per la riga dei commenti, finisco per ricevere solo una riga dalle notizie (ricorda, ci sono 2,) e COUNT (comments.id) mi dà 2 (dovrebbe mostrare 1, come ho un commento per ogni post.)
Cosa sto facendo di sbagliato? Perché mostra solo un post di notizie e dice che ha due commenti, quando ci sono due post di notizie, ciascuno con un commento?
SELECT news.id, users.username, news.title, news.date, news.body, COUNT(comments.id)
FROM news
LEFT JOIN users
ON news.user_id = users.id
LEFT JOIN comments
ON comments.news_id = news.id
Inoltre, giusto per essere sicuro di una cosa, mia sinistra unirsi ai commenti è il modo corretto per ottenere tutti i messaggi, indipendentemente dal fatto che abbiano commenti o no, giusto? O sarebbe giusto unirsi? Oh, un'ultima cosa ... se cambio commenti.news_id = news.id a news.id = comments.news_id, ottengo 0 risultati.
DOVETE utilizzare il gruppo per? Il mio doppio join da principiante non funziona, e sto cercando di scoprire perché. –
Grazie - mi ha aiutato a risolvere un problema che è stato abbastanza difficile per me per passare 3 ore - risolto solo in minuti – Muhammad
Grande grande grazie amico. Risolto il mio problema :) – C4u