Приветствую!


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


id | date | msg
-----------------------------
1 | 12.08.2011 | спасибо
2 | 13.10.2011 | благодарность




id | date | msg
-----------------------------
1 | 21.12.2011 | вопрос
2 | 13.11.2011 | предложение
3 | 28.12.2011 | замечание


Нужно составить запрос, выводящий их в следующем порядке в 1 таблице:


date | msg
-----------------------------
28.12.2011 | замечание
21.12.2011 | вопрос
13.11.2011 | предложение
13.10.2011 | благодарность
12.08.2011 | спасибо


Прошу помощи!


Подскажите где почитать можно про такие запросы.




@темы: База данных, PHP

Комментарии
28.12.2011 в 12:00

alhames.ru
UNION?)
Что-то не совсем понимаю зачем хранить однотипные несвязанные данные в разных таблицах..
28.12.2011 в 12:12

Одни данные поступают в таблицу из формы обратной связи на сайте, другие из другого источника в другую таблицу, но нужно отобразить обе таблицы в одной.
Для данных с формы важен счетчик, т.е. каждой записи присвоен свой идентификационный номер, и этот счетчик не должен "расходоваться" на данные из другого источника. Поэтому и создала вторую таблицу.


Вроде так работает:

(
SELECT `table1`.`date` AS `date1` , `table1`.`msg` AS `msg1`
FROM questionsandanswers
)
UNION (

SELECT `table2`.`date` AS `date2` , `table2`.`msg` AS `msg2`
FROM questionsandthanks
)
ORDER BY date1 DESC

Получилось так:
date1 | msg1
-----------------------------
28.12.2011 | замечание
21.12.2011 | вопрос
13.11.2011 | предложение
13.10.2011 | благодарность
12.08.2011 | спасибо
28.12.2011 в 12:15

Пропускай все через сердце
Я могу немного оффтопом задать вопрос?
У меня есть две связанные таблицы, связь один ко многим, нужно одновременно добавлять данные в эти таблицы.
INNER JOIN у меня отлично работает на локалка (тип таблиц InnoDB), а вот на хостинге таблицы типа MyIsam, и там эта команда вроде не поддерживается. Какую функцию следует применить? Тоже Union?

28.12.2011 в 14:14

alhames.ru
Для данных с формы важен счетчик, т.е. каждой записи присвоен свой идентификационный номер
id | date | msg | type
где type - это bool поле, содержащее либо 1 (обратная связь) либо 0 (другой источник).

SELECT COUNT(`id`) WHERE `type` = 1
Вернет вам "счетчик" для обратной связи.

Если требуется для всех записей последовательный уникальный id, то 2 дополнительных поля: id_feedback, id_other, куда вбивается MAX(`id_feedback`)+1 и NULL, если это обратная связь, либо NULL и MAX(`id_other`)+1, если другой источник.
Опять же не понимаю - зачем нужен последовательный id

UNION тяжелая операция, не рекомендую ее использовать вообще.
28.12.2011 в 14:20

alhames.ru
У меня есть две связанные таблицы, связь один ко многим, нужно одновременно добавлять данные в эти таблицы.
"Одновременно" - это как? Вы хотите одним INSERT IGNORE вставлять данные в разные таблицы?
28.12.2011 в 14:36

Пропускай все через сердце
alhames, да, именно так.
одним запросом добавить данные в обе таблицы
28.12.2011 в 15:15

alhames.ru
Если я не ошибаюсь, в одном запросе можно вставить записи только в одну таблицу - да, их может быть много, но таблица все равно одна.
28.12.2011 в 15:59

Пропускай все через сердце
alhames, я для таблиц типа innodb Lелала запрос с inner join, для myisam не работает
т.е. нормально будет сделать 2 независимых запроса?
28.12.2011 в 16:17

alhames.ru
т.е. нормально будет сделать 2 независимых запроса?
для инсертов / апдейтов да, на каждую таблицу по запросу.
28.12.2011 в 16:30

Пропускай все через сердце
alhames, ок, спасибо!