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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
SunChase
Отправлено: 18 Сентября, 2010 - 21:05:46
Post Id



Гость


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


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




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

Хочу сделать чтото вроде новостной ленты событий,которая составляется из значений двух таблиц,а именно Коментарии и Рейтинги.

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

1.Комментарий .... дата : 18.09.2010 21:02
2.Рейтинг .... дата : 15.09.2010 20:05
3.Коментарий ....
и т .д.
 
 Top
HotBird
Отправлено: 18 Сентября, 2010 - 22:24:53
Post Id



Гость


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


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




CODE (SQL):
скопировать код в буфер обмена
  1. (SELECT comment,date FROM comments )
  2. UNION
  3. (SELECT rating,date FROM ratings )
  4. ORDER BY date DESC


-----
Человек, сделавший синтаксический анализатор PHP на одном регулярном выражении, займет достойное место среди гениев.
Качественный хостинг по доступной цене
 
 Top
SunChase
Отправлено: 18 Сентября, 2010 - 22:26:55
Post Id



Гость


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


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




Спасибо.Только вот ещё такой вопрос :
если в двух таблицах столбец с датой назван по своему (com_date,rating_creationdate) то как это правильно написать ?
 
 Top
HotBird
Отправлено: 18 Сентября, 2010 - 23:03:11
Post Id



Гость


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


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




Тогда так:
CODE (SQL):
скопировать код в буфер обмена
  1. (SELECT comment,com_date FROM comments )
  2. UNION ALL
  3. (SELECT rating,rating_creationdate FROM ratings )
  4. ORDER BY 2 DESC

Добавил ALL чтобы проводилась выборка всех строк, иначе будут выбиратся только уникальные.

(Отредактировано автором: 18 Сентября, 2010 - 23:08:46)



-----
Человек, сделавший синтаксический анализатор PHP на одном регулярном выражении, займет достойное место среди гениев.
Качественный хостинг по доступной цене
 
 Top
SunChase
Отправлено: 18 Сентября, 2010 - 23:33:20
Post Id



Гость


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


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




Таким методом вылазит ошибка "The used SELECT statements have a different number of columns"
 
 Top
HotBird
Отправлено: 19 Сентября, 2010 - 00:00:57
Post Id



Гость


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


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




Тогда попробуйте сместить номера столбцов com_date и rating_creationdate к одинаковому значению, а потом указать этот номер в ORDER BY ? DESC

(Отредактировано автором: 19 Сентября, 2010 - 00:01:37)



-----
Человек, сделавший синтаксический анализатор PHP на одном регулярном выражении, займет достойное место среди гениев.
Качественный хостинг по доступной цене
 
 Top
SunChase
Отправлено: 19 Сентября, 2010 - 00:45:07
Post Id



Гость


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


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




да тут ошибка вылазит и без применения ORDER BY
 
 Top
HotBird
Отправлено: 19 Сентября, 2010 - 01:31:51
Post Id



Гость


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


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




Попробуйте сместить номера столбцов com_date и rating_creationdate к одинаковому значению и столбцы comment и rating тоже к одинаковому значению.

Или ещё вариант создавать временную таблицу копируя туда данные из двух запросов а тогда делать из неё выборку с сортировкой.

(Отредактировано автором: 19 Сентября, 2010 - 01:32:33)



-----
Человек, сделавший синтаксический анализатор PHP на одном регулярном выражении, займет достойное место среди гениев.
Качественный хостинг по доступной цене
 
 Top
JustUserR
Отправлено: 19 Сентября, 2010 - 01:45:14
Post Id



Активный участник


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


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




HotBird Для осуществления вывода значений из различных таблиц БД кототые связываются по некоторому общему критерую возможно использование FULL JOIN-запросов - которое позволяет по сути получить необходимый набор данных с интеграцией столбцов


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
SunChase
Отправлено: 19 Сентября, 2010 - 20:49:08
Post Id



Гость


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


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




Спасибо, но проблема так и нерешилась.
 
 Top
JustUserR
Отправлено: 20 Сентября, 2010 - 17:36:41
Post Id



Активный участник


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


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




SunChase пишет:
Спасибо, но проблема так и нерешилась.
Возможно в вашем случае причиной ошибки в SQL-запросе является не фактическое неправильное его составление - а передаче неправильных интерполируемых параметров в PHP-скрипте - в таком случае полезно использовать диагностический вывод Кроме того для огранизации вывода сложного SQL-запроса можно использовать статические пользовательские SQL-переменные в которые можно сохранит значения промежуточных результатов


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
zardoz
Отправлено: 23 Сентября, 2010 - 00:01:55
Post Id


Гость


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


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




SunChase пишет:
Спасибо, но проблема так и нерешилась.

Конечно не решится, у вас рейтинг под комментарием относится к самому комментарию? Думается что - да. А как они связаны в запросе? Никак.
Выводить нужно связав их либо подзапросом либо JOIN'ом...
Для подробностей нужны структуры таблиц comments и ratings.

С уважением.
 
 Top
JustUserR
Отправлено: 23 Сентября, 2010 - 16:54:51
Post Id



Активный участник


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


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




zardoz пишет:
А как они связаны в запросе? Никак.
В принципе для осуществления вывода несвязанной информации из Бд в едином запросе возможно использовать систему alias-инга полей - в таком случае названия колонок с данными будут идентичными и для разденеия строк может использовать отденое константое выражение - определяющая принадлежность текущего информационного поля к определенному классу выборки


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
zardoz
Отправлено: 23 Сентября, 2010 - 17:37:07
Post Id


Гость


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


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




JustUserR, приведите самый легкий пример.
Мне кажется мы о разных вещах говорим.

С уважением.
 
 Top
JustUserR
Отправлено: 24 Сентября, 2010 - 00:41:55
Post Id



Активный участник


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


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




zardoz пишет:
JustUserR, приведите самый легкий пример.
Мне кажется мы о разных вещах говорим
В приведенном выше сообщении имелась в виду реализация вывода разнородной информации в SQL-запроса путем явного приведения ее в обший вид - такой подход демонстрирует следующий пример
CODE (text):
скопировать код в буфер обмена
  1. (SELECT cm_field1 AS P0, cm_field2 AS P1, "comments" AS TP FROM comments ) UNION
  2. (SELECT rt_field1 AS P0, rt_field2 AS P1, "ratings" AS TP FROM ratings )


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB