Ответ 1
Я добавил ответ на предыдущий вопрос, пожалуйста, обратитесь к первому, для понимания.
Вы не можете получить его от bb_ratings
только путем его создания и взлома. Вы получаете Null, потому что вы думаете в терминах сетки, а не реляционных множеств (то есть центральной концепции реляционной модели).
-
Прежде чем вы решите, в какую таблицу перейти, чтобы обслуживать ваш запрос, вам нужно решить, что вы хотите для структуры вашего набора результатов.
-
Затем ограничьте его (строки) с помощью предложения
WHERE
. -
Затем выясните, где (какие таблицы) получить столбцы. Либо присоединяется к большему количеству таблиц, и больше работает над предложением
WHERE
; или скалярные подзапросы, соотнесенные с внешним запросом.
Вы не знаете, что хотите. Похоже, вам нужен тот же отчет, что и предыдущий вопрос, плюс столбец для данных пользователей. Для меня структура вашего результирующего набора - это список бюллетеней. Ну, я могу получить это из bulletin
, не нужно идти в bulletin_like
, а затем для GROUP это.
Если вы думаете в терминах множеств, это очень просто, нет необходимости перепрыгивать через обручи с материализованными представлениями или "вложенными" запросами:
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
, задайте вопрос.
.
- Прекратить использование
-
Этот вопрос. Сообщите мне, в какой момент вы заблудились, и я подробно расскажу о нем с этой точки.
- Для этого вопроса вам нужен список бюллетеней с симпатией; антипатии; и этим пользователям нравится. Это верно? Вы пробовали код, который я предоставил?
.
- Для этого вопроса вам нужен список бюллетеней с симпатией; антипатии; и этим пользователям нравится. Это верно? Вы пробовали код, который я предоставил?
- Посмотрел на связанный вопрос. Это беспорядок, и никто не обратился к более глубокой проблеме; они ответили на проблему изолированно. Теперь у вас есть ответ, но вы этого не понимаете. Это очень медленный путь прогресса.