Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: 4 таблицы в один запрос
 
 автор: Stifter2   (16.04.2009 в 18:01)   письмо автору
 
 

Здравствуйте,

скажите, пожалуйста, как совместить в один запрос (а может быть и несколько), чтобы сделать следующее:

есть 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(!
$jmputerror("Ошибка при обращении к комментариям");
      if(
mysql_num_rows($jm) > 0) {
        while(
$entry mysql_fetch_array($jm)) {
           echo 
$entry['date_format']."&nbsp;".$entry['text'];
        }
      }
?>


Также могу вывсети из других разделов, но как сделать, чтобы все в одном списке было, с сортировкой по дате как уже сделано.

  Ответить  
 
 автор: Trianon   (16.04.2009 в 20:30)   письмо автору
 
   для: Stifter2   (16.04.2009 в 18:01)
 

Зачем держать сущности одного типа в разных таблицах?

  Ответить  
 
 автор: Stifter2   (16.04.2009 в 20:34)   письмо автору
 
   для: Trianon   (16.04.2009 в 20:30)
 

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

А есть какой-нибудь простой вариант для сложившейся ситуации?

  Ответить  
 
 автор: Trianon   (16.04.2009 в 20:40)   письмо автору
 
   для: Stifter2   (16.04.2009 в 20:34)
 

в поле помещают чужой ключ к другой таблице - номер раздела.
А в ней уже названия разделов и прочие характеристики, с ними связанные.

  Ответить  
 
 автор: Stifter2   (16.04.2009 в 20:43)   письмо автору
 
   для: Trianon   (16.04.2009 в 20:40)
 

Да, это я понял. А сейчас, чтобы не переписывать всё заново, как запрос сделать из всех 4 таблиц?

  Ответить  
 
 автор: Stifter2   (16.04.2009 в 21:13)   письмо автору
 
   для: Trianon   (16.04.2009 в 20:40)
 

Слишком уж много прикручено вокруг этих таблиц, переделывать уж очень долго. Помогите, пожалуйста, написать запрос.

  Ответить  
 
 автор: Trianon   (16.04.2009 в 21:22)   письмо автору
 
   для: Stifter2   (16.04.2009 в 21:13)
 

можете попробовать воспользоваться конструкцией UNION

  Ответить  
 
 автор: Stifter2   (16.04.2009 в 22:27)   письмо автору
 
   для: 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(!
$jmputerror("Ошибка при обращении к комментариям"); 
      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)

  Ответить  
 
 автор: Stifter2   (17.04.2009 в 17:11)   письмо автору
 
   для: Trianon   (16.04.2009 в 21:22)
 

Всё-таки решил переделать как вы советовали. Сделаю всё в одну таблицу.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования