2011-03-16 5 views
1

Я застрял в очень неприятной проблеме. У меня есть простой раздел «Почта» и «Комментарии» на моем сайте, как в блоге, т. Е. В двух таблицах «сообщения» и «комментарии»:POST_COMMENTS в одном запросе MySQL

сообщений -> idpost, название, текст, дата комментарий -> idcomment, idpost_cmt, email, message, idcomment_cmt

Очень простой. idpost_cmt -> Внешний ключ к вывешивает таблицу

Последнее поле в замечании таблице т.е. «idcomment_cmt» будет использоваться, если кто-то посылает комментарий на уже существующий комментарий:

сообщение

| _ Комментарий 1

| _ Комментарий 2

| _ Комментарий 3

| _ Комментарий 4

_ _ | _ Комментарий 4,1

_ _ | _ Комментарий 4.2

| _ Комментарий 5 . . . so on ...

Теперь я точно хочу, чтобы запросить все сообщения и комментарии в одном запросе mysql. То, что я делаю сейчас, это то, что сначала я получаю все сообщения, а затем прохожу через каждый пост. В каждом цикле я запрашиваю комментарии, используя текущий идентификатор сообщения. А затем перебирайте комментарии и каждый цикл комментариев, добавляйте комментарии к комментариям с помощью текущего комментария.

Как вы можете видеть, таким образом для запроса одной страницы может потребоваться 500 или более запросов sql, что слишком много для сервера базы данных. Если бы кто-нибудь мог мне помочь, как это сделать, я действительно очень признателен.

Большое спасибо ...

+0

Прочитайте это о иерархических данных в реляционных базах данных: http://stackoverflow.com/questions/4048151/what-are-the-options-for-storing-hierarchical-data-in-a-relational-database , Вы используете ** ** модель смещения **. –

ответ

0

Вы должны запустить два запроса.

  1. , чтобы получить все сообщения
  2. , чтобы получить все комментарии для всех сообщений, включая суб-комментарии

вы можете чем поместить комментарии к группам с помощью idpost_cmt

что-то вроде:

SELECT idpost, 
     title, 
     TEXT, 
     DATE 
FROM posts 
ORDER BY DATE DESC 
LIMIT 30 

Второй запрос может быть примерно таким:

SELECT idcomment, 
     idpost_cmt, 
     email, 
     message, 
     idcomment_cmt 
FROM comments 
     JOIN posts 
     ON posts.idpost = comments.idpost_cmt 
WHERE posts.idpost IN (1, 2, 3, 4) 
ORDER BY idpost_cmt, 
      idcomment_cmt, 
      idcomment DESC 
+0

Большое вам спасибо ... Я собираюсь попробовать это. –

+0

Привет, спасибо ... это сработало для меня! –

+0

Вам нужно научиться принимать ответы на этом форуме. См. Слева от ответа ниже голосования чек (отметьте), который вы можете отметить. Пожалуйста, сделай так. – Pentium10

Смежные вопросы