База данных отношений - PullRequest
0 голосов
/ 08 декабря 2010

Я пытаюсь отобразить все доски в определенной категории, но у меня проблемы с запросом SQL. Я хочу, чтобы он просматривал все сообщения определенной категории, извлекал из этого идентификатор пользователя, находил имя пользователя из таблицы пользователей и затем подсчитывал, сколько комментариев в сообщении.

Вот таблицы и некоторые поля:

boards  
    board_id  

comments - the replies to the post  
    comment_id  

discussion - the posts
    discussion_id  
    discussion_user  
    discussion_board  
    discussion_time  
    discussion_title  

users  
  id  
  username      

Первоначально у меня было это:

SELECT 
    a.discussion_id, 
    a.discussion_time, 
    a.discussion_title, 
    a.discussion_type, 
    a.discussion_media, 
    b.username, 
    Count(c.comment_id) AS totalComments
FROM 
    discussion a, 
    users b, 
    comments c
WHERE 
    discussion_board='".$board['board_id']."' AND 
    b.id=a.discussion_user AND 
    c.comment_post=a.discussion_id  

Но он показывает сообщение, только если может найти комментарии.

Как я могу это исправить? Я все еще узнаю больше об отношениях SQL и базы данных. Осталось присоединиться?

Ответы [ 3 ]

3 голосов
/ 08 декабря 2010

Левые соединения - это путь, так как они вытянут все из a, независимо от того, есть ли соответствующая запись в b или c.Подробнее о соединениях (и SQL в целом) можно найти здесь .

1 голос
/ 08 декабря 2010
SELECT a.discussion_id, a.discussion_time, a.discussion_title, a.discussion_type, a.discussion_media, b.username, Count(c.comment_id) AS totalComments FROM discussion a,
left join  users b on b.id=a.discussion_user
left join comments c on c.comment_post=a.discussion_id WHERE discussion_board='".$board['board_id']."'" 
0 голосов
/ 08 декабря 2010

Используйте синтаксис объединения SQL-92 (где вы явно используете ключевое слово join) для соединения, это делает запрос более читабельным, особенно после того, как вы начнете добавлять внешние объединения.

И да, вы хотитеleft join к вашей таблице комментариев.

...