Добавих отговор към предишния въпрос, моля, първо вижте него, за да разберете.
Не можете да го получите от bb_ratings
сам, като го ГРУПИРАТЕ и хакнете. Получавате Null, защото мислите от гледна точка на мрежа, а не на релационни набори (това е централната концепция на релационния модел).
-
Преди да решите към коя таблица(и) да отидете, за да обслужите вашата заявка, трябва да решите какво искате за структурата на вашия набор от резултати.
-
След това го ограничете (кои редове) с
WHERE
клауза. -
След това разберете откъде (от какви таблици) да вземете колоните. Или се присъединява към повече таблици и повече работа върху
WHERE
клауза; или скаларни подзаявки, свързани с външната заявка.
Не сте наясно какво искате. Изглежда, че искате същия отчет като предишния въпрос, плюс колона за дадения глас на потребителите. За мен структурата на вашия набор от резултати е списък с бюлетини. Е, мога да го получа от bulletin
, няма нужда да отивате на bulletin_like
и след това трябва да ГРУПИРАТЕ това.
Ако мислите от гледна точка на набори, това е много лесно, няма нужда да прескачате през обръчи с материализирани изгледи или „вложени“ заявки:
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
Отговори на коментари
Имам чувството, че това, което казвате, е много важно за начина, по който подхождам към SQL
-
Да, абсолютно. Ако желаете да научите правилните неща предварително, това ще:
- спестите всякакви проблеми по-късно
- направете заявките си по-ефективни
- ви позволяват да кодирате по-бързо
.
-
Засега забравете за използването на набори от резултати като таблици (много по-бавно) и временни таблици (определено не се изисква, ако вашата база данни е нормализирана). Вие стемного по-добре да правите запитвания към таблиците директно. Трябва да научите различни предмети като релационния модел; как се използва SQL; какне да използвате SQL, за да избегнете проблеми; и т.н. Готов съм да ти помогна и да остана с теб известно време, но трябва да знам, че имаш желание. Ще отнеме малко напред-назад. В този сайт има малко шум, така че ще игнорирам други коментари (до края) и ще отговарям само на вашите.
- спрете да използвате
GROUP BY
, това сериозно пречи на вашето разбиране на SQL. Ако не можете да получите отчета, който искате, без да използватеGROUP BY
, задайте въпрос.
.
- спрете да използвате
-
Този публикуван въпрос. Кажете ми в кой момент сте се изгубили и аз ще предоставя повече подробности от този момент нататък.
- За този въпрос искате списък с бюлетини с харесвания; нехаресвания; и това се харесва на потребителите. Вярно ли е ? Опитахте ли кода, който предоставих?
.
- За този въпрос искате списък с бюлетини с харесвания; нехаресвания; и това се харесва на потребителите. Вярно ли е ? Опитахте ли кода, който предоставих?
- Разгледах свързания въпрос. Това е бъркотия и никой не е обърнал внимание на по-дълбокия проблем; те са отговорили на проблема на повърхността, изолирано. Сега имате отговор, но не го разбирате. Това е много бавен начин за напредък.