SQL-запрос, который проверяет данные другой таблицы - PullRequest
0 голосов
/ 13 ноября 2011

Я не слишком хорошо разбираюсь с более сложными SQL-запросами, такими как JOIN, поэтому я не разбираюсь в этом аспекте.

У меня есть три стола:

FORUM_Topics
FORUM_Threads
FORUM_Replies

Тема форума - высший уровень.

Тема форума находится внутри темы.

Ответ форума находится в теме.

Ответы не говорят прямо, в какой теме они находятся, только в какой теме. Затем тема говорит, что тема.

Так это выглядит примерно так:

FORUM_Topics
ID = 1
Name = A topic

FORUM_Threads
ID = 1
TopicID = 1
Name = A forum thread

FORUM_Replies
ID = 1
ThreadID = 1
Name = A forum reply

Если бы я хотел посмотреть, сколько тем в теме, это так просто:

$threads = mysql_query("SELECT * FROM FORUM_Threads WHERE TopicID = $ID");

но как мне проверить, сколько ответов в теме?

Ответы [ 3 ]

3 голосов
/ 13 ноября 2011
select FORUM_Replies.* from FORUM_Replies
inner join FORUM_Threads on FORUM_Replies.ThreadID = FORUM_Threads.ID
where FORUM_Threads.TopicID = $ID

Возможно, вы захотите получить результат как из ответов, так и из тем.

select FORUM_Replies.Name as ReplyName, FORUM_Threads.Name as ForumName from FORUM_Replies
inner join FORUM_Threads on FORUM_Replies.ThreadID = FORUM_Threads.ID
where FORUM_Threads.TopicID = $ID
0 голосов
/ 13 ноября 2011

Я думаю, что-то вроде этого:

SELECT
  COUNT(`forum_replies`.`name`) as `totals`
FROM
  `FORUM_REPLIES`
LEFT JOIN
  `forum_replies` ON(`forum_threads`.`topicid`=`forum_replies`.`threadid`)
LEFT JOIN
  `FORUM_THREDS` ON(`forum_topic`.`id`=`forum_threads`.`topicid`)
WHERE
  `forum_topics`.`id`="7";
0 голосов
/ 13 ноября 2011

Я думаю, вы должны использовать этот запрос

SELECT COUNT(*) FROM FORUM_Replies WHERE ThreadID IN (SELECT DISTINCT ID FROM FORUM_Threads WHERE TopicID = @id)

что должно сделать трюк

...