SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 14.05.2011 18:55:50

alesto
Участник
Зарегистрирован: 27.01.2011
Сообщений: 19

Сортировка по трём столбцам из разных таблиц одновременно

Есть 3 таблицы с разным контентом. Общего у них только то что у них есть поле 'date' типа TIMESTAMP.
Как выбрать 10 полследних добавленных записей из 3х таблиц одновременно?

Неактивен

 

#2 14.05.2011 21:34:57

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

Re: Сортировка по трём столбцам из разных таблиц одновременно

Выбрать по 10 последних строк из трех таблиц, отсортировать по дате и выбрать
из этих 30 записей 10 последних.

Неактивен

 

#3 14.05.2011 21:35:51

alesto
Участник
Зарегистрирован: 27.01.2011
Сообщений: 19

Re: Сортировка по трём столбцам из разных таблиц одновременно

это делается тремя вложенными запросами? а можно пример?

Неактивен

 

#4 14.05.2011 21:43:30

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

Re: Сортировка по трём столбцам из разных таблиц одновременно

SELECT ... FROM ( SELECT ... FROM a ORDER ... LIMIT 10 UNION SELECT ... UNION SELECT ...) t ...

Неактивен

 

#5 14.05.2011 21:46:36

alesto
Участник
Зарегистрирован: 27.01.2011
Сообщений: 19

Re: Сортировка по трём столбцам из разных таблиц одновременно

А разве union будет работать если таблицы разные?

Неактивен

 

#6 14.05.2011 21:56:40

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

Re: Сортировка по трём столбцам из разных таблиц одновременно

Если выбирать одинаковое количество столбцов одинакового типа — почему нет?

Неактивен

 

#7 14.05.2011 23:34:43

alesto
Участник
Зарегистрирован: 27.01.2011
Сообщений: 19

Re: Сортировка по трём столбцам из разных таблиц одновременно

Они разные sad по другому никак?

Неактивен

 

#8 14.05.2011 23:54:04

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Сортировка по трём столбцам из разных таблиц одновременно

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

Вот таким запросом получите номер таблицы и id записей.

SELECT * FROM ((SELECT 1 AS t, date, id FROM tbl1 ORDER BY date desc LIMIT 10) UNION (SELECT 2 AS t, date, id FROM tbl2 ORDER BY date desc LIMIT 10) UNION (SELECT 3 AS t, date, id FROM tbl3 ORDER BY date desc LIMIT 10)) AS tbl ORDER BY date desc LIMIT 10;

Потом сделаете отдельные запросы для получения самих записей.

Неактивен

 

#9 15.05.2011 00:17:27

alesto
Участник
Зарегистрирован: 27.01.2011
Сообщений: 19

Re: Сортировка по трём столбцам из разных таблиц одновременно

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

Неактивен

 

#10 15.05.2011 00:23:04

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Сортировка по трём столбцам из разных таблиц одновременно

Есть еще один способ - вложенными селектами приводить данные к единообразному формату.

SELECT * FROM ((SELECT 1 AS t, CONCAT("comment/",id,".html") AS url, commenttext AS data , date, id FROM tbl1 ORDER BY date desc LIMIT 10) UNION (SELECT 2 AS t, CONCAT("status/",id,".html") AS url, newwtatus AS data, date, id FROM tbl2 ORDER BY date desc LIMIT 10) UNION (SELECT 3 AS t, CONCAT("photo/",id,".html") AS url, filename AS data, date, id FROM tbl3 ORDER BY date desc LIMIT 10)) AS tbl ORDER BY date desc LIMIT 10;

Неактивен

 

#11 15.05.2011 11:57:46

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

Re: Сортировка по трём столбцам из разных таблиц одновременно

Но правильно — не делать один запрос для разнородных данных. Правильно делать
три разных запроса для трех разных типов данных.

Неактивен

 

Board footer

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