SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 29.11.2010 13:27:27

Aldo
Участник
Зарегистрирован: 29.11.2010
Сообщений: 8

Выборка из нескольких таблиц MySQL

Добрый день!

Подскажите, пожалуйста, верное решение, а то умаялся совсем...

Есть 3 таблицы:

events (id, type, title, add_time)
news(news_id, title, add_time)
user(user_id, nickname, add_time)

Необходимо выбрать следующие поля:

events(type, title, add_time);
news(news_id);
user(user_id);

и отсортировать записи по events.add_time в порядке убывания...

Делаю запрос:

$sql = mysql_query("SELECT events.type, events.title, events.add_time, news.news_id, user.user_id FROM `events`, `news`, `user` WHERE events.add_time = news.add_time AND events.add_time = user.add_time ORDER BY events.add_time DESC");

Запрос не работает, данные не извлекаются через:

while( $row = mysql_fetch_array($sql) )
{
//
}

Никакой ошибки не пишет. И mysql_num_rows($sql) показывает 0...

Если запрашивать лишь с двух таблиц:

$sql = mysql_query("SELECT events.type, events.title, events.add_time, news.news_id FROM `events`, `news` WHERE events.add_time = news.add_time ORDER BY events.add_time DESC");

То указанные в SELECT'е поля успешно извлекаются. Думаю, это из-за второго условия WHERE получается такой затор. Но не уверен...

Подскажите, как сделать правильный запрос? Заранее огромное за помощь!

Отредактированно Aldo (29.11.2010 14:05:17)

Неактивен

 

#2 29.11.2010 13:50:30

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Выборка из нескольких таблиц MySQL

В user нет поля add_time, а ошибки надо выводить, тогда из будет видно smile

Неактивен

 

#3 29.11.2010 14:02:30

Aldo
Участник
Зарегистрирован: 29.11.2010
Сообщений: 8

Re: Выборка из нескольких таблиц MySQL

paulus написал:

В user нет поля add_time, а ошибки надо выводить, тогда из будет видно smile

Прошу прощения, это я ошибся. Поля таблички "user" подкорректировал в первом сообщении:

user(user_id, nickname, add_time)

Проблема с выводом остается прежней.

После запроса поставил:

echo mysql_error();

Ничего не показывает...

Неактивен

 

#4 29.11.2010 14:08:53

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выборка из нескольких таблиц MySQL

Значит у вас нет данных удовлетворяющих условию events.add_time = user.add_time Закономерно, что результат запроса пустой.

Неактивен

 

#5 29.11.2010 14:33:16

Aldo
Участник
Зарегистрирован: 29.11.2010
Сообщений: 8

Re: Выборка из нескольких таблиц MySQL

vasya написал:

Значит у вас нет данных удовлетворяющих условию events.add_time = user.add_time Закономерно, что результат запроса пустой.

Вот у меня данные в трех таблицах:

Табличка "news":

id: 1
title: Пролетая над гнездом кукушки
add_time: 1290908672

id: 2
title: Большой сон
add_time: 1290908699

--------

Табличка "user":

user_id: 1
nickname: Alex
add_time: 1291036778

--------

Табличка "events" (в нее заношу произведенные ранее действия). После того, как, к примеру, внесена новость в табличку "news", тут же заносится отчет в таблицу "events". То же самое с зарегистрированным пользователем):

id: 1
type: 2
title: Пролетая над гнездом кукушки
add_time: 1290908672

id: 2
type: 2
title: Большой сон
add_time: 1290908699

id: 3
type: 1
title: Alex
add_time: 1291036778

Потом планирую выводить зашедшему на сайт пользователю отчет о произошедших на сайте событиях с таблички "events"...

И вот если в запросе извлекаю данные с "events" и "news" - то все работает нормально. А вот если добавляю в запрос третью таблицу "user" - то ни в какую... ((

Отредактированно Aldo (29.11.2010 14:34:45)

Неактивен

 

#6 29.11.2010 14:45:13

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выборка из нескольких таблиц MySQL

Ага, понятно.
Вы пытаетесь выбрать такую запись из таблицы events, у которой дата имеет соответствие и в таблице news и в таблице user. А такой естественно нет.

Вам нужно использовать left join:
FROM `events` LEFT JOIN `news`ON events.add_time = news.add_time LEFT JOIN `user` ON events.add_time = user.add_time

Неактивен

 

#7 29.11.2010 15:14:50

Aldo
Участник
Зарегистрирован: 29.11.2010
Сообщений: 8

Re: Выборка из нескольких таблиц MySQL

vasya написал:

Ага, понятно.
Вы пытаетесь выбрать такую запись из таблицы events, у которой дата имеет соответствие и в таблице news и в таблице user. А такой естественно нет.

Вам нужно использовать left join:
FROM `events` LEFT JOIN `news`ON events.add_time = news.add_time LEFT JOIN `user` ON events.add_time = user.add_time

Огромнейшее Вам спасибо!!! Теперь все выводится так, как я и хотел! smile

PS. Форум добавляю в закладки! Остался доволен оперативной помощью! Еще раз, спасибо! smile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson