|
|
|
| Здравствуйте,
скажите, пожалуйста, как совместить в один запрос (а может быть и несколько), чтобы сделать следующее:
есть 4 таблицы в БД (комментарии пользователей к 4 разным разделам сайта), необходимо вывести на главной странице блок "Последние комментарии на сайте", списком из 5 строк(например), чтобы среди этих строк были одновременно комментарии из разных разделов.
Вот так я вывожу 5 строк из одной таблицы:
<?php
$query = "SELECT *, DATE_FORMAT(date,'%d.%m.%Y') as date_format
FROM journal_comments
WHERE hide='show' AND date <= NOW()
ORDER BY date DESC
LIMIT 5";
$jm = mysql_query($query);
if(!$jm) puterror("Ошибка при обращении к комментариям");
if(mysql_num_rows($jm) > 0) {
while($entry = mysql_fetch_array($jm)) {
echo $entry['date_format']." ".$entry['text'];
}
}
?>
|
Также могу вывсети из других разделов, но как сделать, чтобы все в одном списке было, с сортировкой по дате как уже сделано. | |
|
|
|
|
|
|
|
для: Stifter2
(16.04.2009 в 18:01)
| | Зачем держать сущности одного типа в разных таблицах? | |
|
|
|
|
|
|
|
для: Trianon
(16.04.2009 в 20:30)
| | Хм... Интересный вопрос, точно, можно было проще сделать, ввести еще одно поле, в котором было бы, например, название раздела и т. д.
А есть какой-нибудь простой вариант для сложившейся ситуации? | |
|
|
|
|
|
|
|
для: Stifter2
(16.04.2009 в 20:34)
| | в поле помещают чужой ключ к другой таблице - номер раздела.
А в ней уже названия разделов и прочие характеристики, с ними связанные. | |
|
|
|
|
|
|
|
для: Trianon
(16.04.2009 в 20:40)
| | Да, это я понял. А сейчас, чтобы не переписывать всё заново, как запрос сделать из всех 4 таблиц? | |
|
|
|
|
|
|
|
для: Trianon
(16.04.2009 в 20:40)
| | Слишком уж много прикручено вокруг этих таблиц, переделывать уж очень долго. Помогите, пожалуйста, написать запрос. | |
|
|
|
|
|
|
|
для: Stifter2
(16.04.2009 в 21:13)
| | можете попробовать воспользоваться конструкцией UNION | |
|
|
|
|
|
|
|
для: Trianon
(16.04.2009 в 21:22)
| | Получилось сделать то что хотел. Спасибо, появился еще вопрос :)
<?
$query = "(SELECT *, DATE_FORMAT(putdate,'%d.%m.%Y') as putdate_format
FROM journal_comments WHERE hide='show' AND putdate <= NOW()) UNION
(SELECT *, DATE_FORMAT(putdate,'%d.%m.%Y') as putdate_format
FROM sites_comments WHERE hide='show' AND putdate <= NOW()) UNION
(SELECT *, DATE_FORMAT(putdate,'%d.%m.%Y') as putdate_format
FROM lands_comments WHERE hide='show' AND putdate <= NOW()) UNION
(SELECT *, DATE_FORMAT(putdate,'%d.%m.%Y') as putdate_format
FROM look_comments WHERE hide='show' AND putdate <= NOW())
ORDER BY putdate DESC
LIMIT 5";
$jm = mysql_query($query);
if(!$jm) puterror("Ошибка при обращении к комментариям");
if(mysql_num_rows($jm) > 0) {
while($entry = mysql_fetch_array($jm)) {
echo "<p>".$entry['putdate_format']."<br>".$entry['text']."</p>";
}
}
?>
|
В итоге выводится вот так примерно:
16.04.2009
Текст комментария 5
13.04.2009
Текст комментария 4
10.04.2009
Текст комментария 3
10.04.2009
Текст комментария 2
10.04.2009
Текст комментария 1
|
Теперь следующая проблема. Я хотел бы вывести из какого конкретно раздела отобразился комментарий. В этих 4 таблицах различается только одно поле (в каждой таблице оно по разному называется), показывающее к какому id фотографии/записи в журнале/изображению принадлежит комментарий. Вот как бы теперь вывести это различающееся поле к $entry['text'], относящиеся к своей таблице. Т. е. сделать так:
16.04.2009
Текст комментария 5
раздел 1 (id=1)
13.04.2009
Текст комментария 4
раздел 1 (id=1)
10.04.2009
Текст комментария 3
раздел 2 (id=2)
10.04.2009
Текст комментария 2
раздел 3 (id=3)
10.04.2009
Текст комментария 1
раздел 1 (id=1)
|
| |
|
|
|
|
|
|
|
для: Trianon
(16.04.2009 в 21:22)
| | Всё-таки решил переделать как вы советовали. Сделаю всё в одну таблицу. | |
|
|
|