Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Сортировка таблицы.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Отсортировать одну таблицу, по значениям из другой таблицы.
Zend
Отправлено: 06 Июня, 2011 - 22:39:04
Post Id


Гость


Покинул форум
Сообщений всего: 126
Дата рег-ции: Февр. 2010  


Помог: 0 раз(а)




Есть таблица A, в ней содержаться поля: id, title, com_num.
И есть таблица B в ней содержаться поля: id,post_id, text, date

В таблице A содержаться записи, в таблице B комментарии к этим записям.

Необходимо вытащить все строчки из таблицы А, и эти строчки отсортировать по таблице B (order BY B.date DESC), где post_id = id . Строчки из таблицы A не должны повторяться.

У меня вышел такой кусок кода:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT A. * , B.date
  3. FROM A, B
  4. WHERE A.id = B.post_id
  5. GROUP BY A.id
  6. ORDER BY B.date DESC
  7. LIMIT 0 , 50
  8.  


Но этот SQL запрос выделяет только записи из таблицы А, у которых есть записи в таблице B.
Т.е. если у записи нет комментариев, она не будет выбираться...

Иными словами:
Необходимо сделать сортировку записей (из таблицы A), по дате последних комментариев(из таблицы B).

(Отредактировано автором: 07 Июня, 2011 - 21:32:23)

 
 Top
EuGen Администратор
Отправлено: 06 Июня, 2011 - 22:43:32
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




SELECT A.*, B.date FROM A LEFT JOIN B ON A.id=B.post_id GROUP BY A.id ORDER BY B.date DESC LIMIT 0,50


?


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Zend
Отправлено: 06 Июня, 2011 - 22:48:28
Post Id


Гость


Покинул форум
Сообщений всего: 126
Дата рег-ции: Февр. 2010  


Помог: 0 раз(а)




Да, вроде оно, спасибо!
 
 Top
Zend
Отправлено: 07 Июня, 2011 - 21:03:58
Post Id


Гость


Покинул форум
Сообщений всего: 126
Дата рег-ции: Февр. 2010  


Помог: 0 раз(а)




Нет, не совсем то.
Ещё раз попытаюсь объяснить:
В таблице А - новости, в таблице B - комментарии к этим новостям. Необходимо отсортировать новости, по дате последних комментариев. При этом, надо не забыть вывести новости, у которых нету комментариев, т.е. нету для них записей в таблице B.
(Добавление)
Работает, почти как надо, такой код, но он выдаёт повторки.
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT A . * FROM A LEFT JOIN B ON A.id = B.post_id ORDER BY B.date DESC LIMIT 0, 50
  3.  


Если добавить GROUP BY id, то результат SQL запроса не совсем соответствует действительности.

(Отредактировано автором: 07 Июня, 2011 - 22:01:42)

 
 Top
JMax
Отправлено: 08 Июня, 2011 - 10:10:30
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




LEFT JOIN присобачивает существующие поля из таблицы с коментариями, соответственно, если комментариев нет, то вместо даты будет NULL. Как ORDER BY реагирует на NULL я точно не скажу, т.к. еще не сталкивался, но предполагаю, что NULL идет лесом или отбрасывается в конец, во втором случае его может отсеч ваще ограничение на выборку LIMIT.

Попробуйте

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT A . *, ifnull(B.date, date(now())) AS bdate FROM A LEFT JOIN B ON A.id = B.post_id ORDER BY bdate DESC LIMIT 0, 50


Ну это примерно, что-то просто нужно сделать с пустыми значениями.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB