Přidal jsem odpověď na předchozí otázku, pro pochopení si ji nejprve přečtěte.
Nemůžete to získat z bb_ratings
sám seskupením a hackováním. Dostanete nulu, protože přemýšlíte v pojmech mřížky, nikoli relačních množin (to je ústřední koncept relačního modelu).
-
Než se rozhodnete, do které tabulky (tabulek) přejít, abyste mohli obsloužit svůj dotaz, musíte se rozhodnout, co chcete pro strukturu sady výsledků.
-
Pak jej omezte (které řádky) pomocí
WHERE
doložka. -
Pak zjistěte, odkud (z jakých tabulek) získat sloupce. Buď se připojí k více tabulkám a více práce na
WHERE
doložka; nebo skalární poddotazy, korelované s vnějším dotazem.
Nemáte jasno v tom, co chcete. Vypadá to, že chcete stejný přehled jako předchozí otázka a navíc sloupec pro hlasování daných uživatelů. Pro mě je struktura vaší sady výsledků seznamem bulletinů. Mohu to získat z bulletin
, není třeba chodit na bulletin_like
a pak to musíte seskupit.
Pokud uvažujete z hlediska množin, je to velmi snadné, není třeba přeskakovat obručemi se zhmotněnými pohledy nebo „vnořenými“ dotazy:
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
Odpovědi na komentáře
Mám pocit, že to, co říkáte, je velmi důležité pro to, jak přistupuji k SQL
-
Ano absolutně. Pokud jste ochotni se předem naučit správné věci, bude to:
- ušetříte si později všechny možné problémy
- zefektivněte své dotazy
- umožňují vám kódovat rychleji
.
-
Prozatím zapomeňte na používání výsledkových sad jako tabulek (mnohem pomalejší) a dočasných tabulek (rozhodně to není nutné, pokud je vaše databáze normalizovaná). Jste moc lepší je dotazovat se přímo na tabulky. Musíte se naučit různé předměty, jako je Relační model; jak používat SQL; jak ne používat SQL, aby se předešlo problémům; atd. Jsem ochoten vám pomoci a chvíli s vámi zůstat, ale potřebuji vědět, že jste ochoten. Bude to trvat trochu tam a zpět. Na tomto webu je trochu šumu, takže ostatní komentáře budu ignorovat (až do konce) a odpovím pouze na váš.
- přestat používat
GROUP BY
, vážně to brání vašemu porozumění SQL. Pokud nemůžete požadovaný přehled získat bez použitíGROUP BY
, položte otázku.
.
- přestat používat
-
Tato zaslaná otázka. Dejte mi vědět, kdy jste se ztratili, a od tohoto okamžiku vám poskytnu další podrobnosti.
- Pro tuto otázku chcete seznam bulletinů s hodnocením Líbí se; nemá rád; a toto se uživatelům líbí. Je to správně ? Vyzkoušeli jste kód, který jsem vám poskytl?
.
- Pro tuto otázku chcete seznam bulletinů s hodnocením Líbí se; nemá rád; a toto se uživatelům líbí. Je to správně ? Vyzkoušeli jste kód, který jsem vám poskytl?
- Podívali jste se na propojenou otázku. Je to nepořádek a nikdo se nezabýval hlubším problémem; odpověděli na problém na povrchu, izolovaně. Nyní máte odpověď, ale nerozumíte jí. To je velmi pomalý způsob, jak postupovat.