Jag har lagt till ett svar på den föregående frågan, vänligen hänvisa till det först, för förståelse.
Du kan inte få det från bb_ratings
ensam genom att gruppera den och hacka den. Du får Null för att du tänker i termer av ett rutnät, inte i relationsuppsättningar (det är det centrala konceptet i den relationella modellen).
-
Innan du bestämmer dig för vilken eller vilka tabeller du ska gå till, för att betjäna din fråga, måste du bestämma vad du vill ha för strukturen för din resultatuppsättning.
-
Begränsa det sedan (vilka rader) med
WHERE
klausul. -
Ta sedan reda på var (vilka tabeller) du ska hämta kolumnerna ifrån. Antingen ansluts till fler tabeller och mer arbete med
WHERE
klausul; eller skalära underfrågor, korrelerade till den yttre frågan.
Du är inte tydlig med vad du vill. Det ser ut som att du vill ha samma rapport som föregående fråga, plus en kolumn för den givna användarens röst. För mig är strukturen i din resultatuppsättning en lista med bulletiner. Tja, jag kan få det från bulletin
, du behöver inte gå till bulletin_like
och sedan måste GRUPPERA det.
Om du tänker i termer av uppsättningar är det väldigt enkelt, du behöver inte hoppa genom ramar med materialiserade vyer eller "kapslade" frågor:
SELECT name AS bulletin,
(SELECT COUNT(like)
FROM bulletin_like bl
WHERE bl.bulletin_id = b.bulletin_id
AND like = 1
) AS like,
(SELECT COUNT(like)
FROM bulletin_like bl
WHERE bl.bulletin_id = b.bulletin_id
AND like = 0
) AS dislike,
(SELECT COUNT(like)
FROM bulletin_like bl
WHERE bl.bulletin_id = b.bulletin_id
AND bl.user_id = {$user_d}
AND like = 1
) AS your_vote
FROM bulletin b
Svar på kommentarer
Jag har en känsla av att det du säger är väldigt viktigt för hur jag närmar mig SQL
-
Ja absolut. Om du är villig att lära dig rätt saker i förväg kommer det att:
- sparar dig alla typer av problem senare
- gör dina frågor mer effektiva
- låter dig koda snabbare
.
-
Glöm nu att använda resultatuppsättningar som tabeller (mycket långsammare) och tillfälliga tabeller (definitivt inte nödvändigt om din databas är normaliserad). Du är mycket bättre att fråga tabellerna direkt. Du behöver lära dig olika ämnen såsom Relationsmodellen; hur man använder SQL; hur inte att använda SQL för att undvika problem; etc. Jag är villig att hjälpa dig och stanna hos dig ett tag, men jag behöver veta att du är villig. Det kommer att ta lite fram och tillbaka. Det är lite brus på den här webbplatsen, så jag kommer att ignorera andra kommentarer (till slutet) och bara svara på dina.
- sluta använda
GROUP BY
, det hindrar allvarligt din förståelse av SQL. Om du inte kan få den rapport du vill ha utan att användaGROUP BY
, ställ en fråga.
.
- sluta använda
-
Denna postade fråga. Låt mig veta när du gick vilse, så kommer jag att ge mer information från den punkten och framåt.
- För den här frågan vill du ha en lista med bulletiner, med likes; ogillar; och det här användarna gillar. Är det rätt ? Har du testat koden jag angav?
.
- För den här frågan vill du ha en lista med bulletiner, med likes; ogillar; och det här användarna gillar. Är det rätt ? Har du testat koden jag angav?
- Tittade på den länkade frågan. Det är en röra, och ingen har tagit upp det djupare problemet; de har besvarat problemet på ytan, isolerat. Du har nu ett svar men du förstår det inte. Det är ett mycket långsamt sätt att göra framsteg.