Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ

Форум MySQL

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Выборка из трех таблиц

Сообщения:  [1-10]   [11-14] 

 
 автор: SS   (28.04.2005 в 02:24)   письмо автору
 
   для: cheops   (27.04.2005 в 23:37)
 

Все супер, спасибо, работает!

   
 
 автор: cheops   (27.04.2005 в 23:37)   письмо автору
 
   для: SS   (27.04.2005 в 22:57)
 

Можно поступить примерно следующим образом
<?php 
  // Устанавливаем соединение с базой данных 
  include "config.php"; 
  // Формируем запрос на выборку изображений
  // с сортировкой по имени изображения
  $query = "SELECT * FROM images ORDER BY name"; 
  // Выполняем запрос 
  $tb = mysql_query($query); 
  // Проверяем правильность выполнения запроса 
  if(!$tb) exit(mysql_error()); 
  // В цикле выполняем вывод изображений
  while($img = mysql_fetch_array($tb)) 
  { 
    echo $img['name']."<br>"; 
    // Запрашиваем комментарии для данного изображения 
    $query = "SELECT comments.name_comment AS name_comment,
                     comments.puttime AS puttime,
                     users.name_user AS name_user
              FROM comments, users
              WHERE comments.id_image = $img[id_image] AND 
                    users.id_user = comments.id_user 
              ORDER BY comments.puttime DESC";
    // Выполняем запрос 
    $com = mysql_query($query); 
    // Проверяем правильность выполнения запроса 
    if(!$com) exit(mysql_error()); 
    // Если есть хоть один комментарий - выводим
    if(mysql_num_rows($com)>0)
    {
      while($comment = mysql_fetch_array($com)) 
      { 
        echo $comment['puttime']." - ".$comment['name_user']."<br>";
        echo $comment['name_comment']."<br>";
      } 
    }
    else
    {
      // Здесь можно вывести, что комментарие нет
    }
    echo "<br>"; 
  } 
?>

При использовании в первом запросе ограничения LIMIT (вы наверное всё равно будет постраничную навигацию использовать) заметного уменьшения скорости наблюдаться не должно.

   
 
 автор: SS   (27.04.2005 в 22:57)   письмо автору
 
   для: cheops   (26.04.2005 в 23:10)
 

Очень жду!!! - у меня вся работа из-за этого встала.

   
 
 автор: SS   (27.04.2005 в 00:34)   письмо автору
 
   для: cheops   (26.04.2005 в 23:10)
 

Ну я же не знал, что тут такие тонкости с названиями. Я как думал, так и сказал. :)
Хорошо, помогите тогда пожалуйста с такой схемой, - мне важен результат, мне нужно вывести все картинки и все комментарии.

   
 
 автор: cheops   (26.04.2005 в 23:10)   письмо автору
 
   для: SS   (26.04.2005 в 18:22)
 

Там не трёхтабличный запрос. Обычно запрашивают картинки - выводят их и для каждой картинки проверяют наличие комментариев. Т.е. система состоит из запроса - обработки результата в цикле и запроса в цикле не комментарии к изображениям.

   
 
 автор: SS   (26.04.2005 в 18:22)   письмо автору
 
   для: cheops   (26.04.2005 в 13:56)
 

Вы хотите сказать, что нельзя вывести такой запрос:
<Вывести все картинки, удовлетворяющие запросу>
IMAGE, где
<если есть комментарии, у которых ID_COMMENT=ID_IMAGE, то вывести эти комментарии><если ID_USER_COMMENT=ID COMMENT, то вывести такого юзера>
и т.д. в цикле
???
Мне кажется это довольно простым запросом с парой условий, просто я не знаю как это написать.
Как же тогда работают гостевые книги, форумы и галереи с возможностью оставить комментарий - там же примерно то же самое, что и мне нужно?

   
 
 автор: cheops   (26.04.2005 в 13:56)   письмо автору
 
   для: SS   (25.04.2005 в 23:25)
 

Нет, тогда не получится, получится только так: первым запросом вывести изображения у которых имеется комментарий, а вторым, отдельным запросом те, у которых нет ни одного комментария (сортировки средствами MySQL здесь к сожалению не получится). Можно сделать финт ушами, добавить системного пользователя в таблицу users (скажем с первичным ключём id_user = 0) и добавить каждому из изображений (автоматически) комментарий этого пользователя, а затем просто не выводить комментарий такого пользователя уже средствами PHP - грубо, но работает.

   
 
 автор: SS   (25.04.2005 в 23:25)   письмо автору
 
   для: cheops   (25.04.2005 в 21:41)
 

-- Версия сервера: 4.0.21
-- Версия PHP: 4.3.9

   
 
 автор: cheops   (25.04.2005 в 21:41)   письмо автору
 
   для: SS   (25.04.2005 в 18:33)
 

А вложенный запрос не сработает, они только в MySQL 4.1 появились, у вас какая версия MySQL?

   
 
 автор: SS   (25.04.2005 в 18:33)   письмо автору
 
   для: cheops   (25.04.2005 в 13:25)
 

Покажите, пожалуйста, как выглядит упрощенная схема такого запроса в запросе?

   

Сообщения:  [1-10]   [11-14] 

Форум разработан IT-студией SoftTime