|
|
|
| Требуется произвести выборку всех записей из 3 таблиц и отсортировать результат по полю date, находящемуся в каждой из трех таблице. Как это сделать? | |
|
|
|
|
|
|
|
для: Mookapek
(07.09.2009 в 22:45)
| | Если во всех таблицах одинаковое колличество записей , то можно выбрать одним запросом слив в один ряд по ряду из каждой таблицы
Если у таблиц одинаковое колличество и типы полей (или запросы возвращают одинаковое) можно слить при помощи UNION три запроса в один
Если ничего такого нет , то это три запроса, но уже лучше тем что меньше данных в одном результате == меньше нагрузки на сервер (если таблицы приличного размера) | |
|
|
|
|
|
|
|
для: heed
(07.09.2009 в 23:07)
| | У меня разное количество полей во всех таблицах. То есть 3 запроса - единственный выход? | |
|
|
|
|
|
|
|
для: Mookapek
(08.09.2009 в 00:09)
| | >У меня разное количество полей во всех таблицах.
какая структура таблиц, и какой результат Вы хотите получить? | |
|
|
|
|
|
|
|
для: Trianon
(08.09.2009 в 00:15)
| | Структура в каком смысле? Есть 3 таблицы, там много-много полей. Есть поля одинаковые во всех трех таблицах, есть разные. Количество полей у таблиц разное, есть поле с датой.
Надо получить данные , допустим, из пяти полей, одинаковых для всех таблиц. Например field1 - field4 и date. | |
|
|
|
|
|
|
|
для: Mookapek
(08.09.2009 в 00:26)
| | Надо привести пример, чтобы понять принцип.
Вы можете упростить имеющиеся таблицы, или придумать три разные (с двумя-четырьмя полями) таблицы "от балды".
Допустим разные и допустим одинаковые - это не одно и то же.
Но приводить пример придется. Не только с полной структурой, но и со строками.
И с ожидаемым результатом.
>Структура в каком смысле?
...!
Структурой называют полное описание таблицы. В идеале - текст SQL-оператора CREATE TABLE | |
|
|
|
|
|
|
|
для: Trianon
(08.09.2009 в 00:30)
| |
CREATE TABLE flats (
id_flats int primary key auto_increment,
type enum('flat','house'),
rooms int,
price int,
square int,
floor int,
floors int,
date datetime
);
CREATE TABLE houses (
id_houses int primary key auto_increment,
type enum('flat','house'),
rooms int,
price int,
square int,
sq_ground int,
date datetime
);
|
Надо выбрать все записи из двух таблиц и вывести, отсортировав по дате.
Для простоты привел 2 таблицы, уменьшил число полей. Надо выбрать данные из полей | |
|
|
|
|
|
|
|
для: Mookapek
(08.09.2009 в 01:12)
| | Строки таблиц приводите.
INSERT INTO flats VALUES(...);
..
INSERT INTO flats VALUES(...);
INSERT INTO houses VALUES(...);
...
INSERT INTO houses VALUES(...);
Две три для каждой. | |
|
|
|
|
|
|
|
для: Mookapek
(08.09.2009 в 01:12)
| |
INSERT INTO flats VALUES(NULL, 'flat', 2, 1000000, 90, 2, 10, '2009-09-08 12:12:12');
INSERT INTO flats VALUES(NULL, 'flat', 3, 1700000, 120, 4, 7, '2009-09-08 14:14:14');
INSERT INTO houses VALUES(NULL, 'house', 3, 2000000, 110, 12, '2009-09-08 12:45:19');
INSERT INTO houses VALUES(NULL, 'house', 4, 2300000, 140, 15, '2009-09-09 15:00:11');
|
| |
|
|
|
|
|
|
|
для: Mookapek
(08.09.2009 в 01:37)
| | и наконец, последнее. Нарисуйте четыре строки, которые, по Вашему, представили бы результат требуемого Вам запроса.
В этих строках должны быть одинаковые типы и одинаковое число колонок.
Значения в некоторых полях могут отсутствовать.
UPD . Первый CREATE TABLE содержит ошибку. Я попробовал убрать строку floor (явно левую) .
Получил несоответствие числа полей INSERT числу полей таблицы. | |
|
|
|
|
|
|
|
для: Trianon
(08.09.2009 в 01:38)
| |
type | id | rooms | price | square | date |
======+====+=======+=========+========+=====================+
flat | 1 | 2 | 1000000 | 90 | 2009-09-08 12:12:12 |
------+----+-------+---------+--------+---------------------+
flat | 2 | 3 | 1700000 | 120 | 2009-09-08 14:14:14 |
------+----+-------+---------+--------+---------------------+
house | 1 | 3 | 2000000 | 110 | 2009-09-08 12:45:19 |
------+----+-------+---------+--------+---------------------+
house | 2 | 4 | 2300000 | 140 | 2009-09-09 15:00:11 |
------+----+-------+---------+--------+---------------------+
|
| |
|
|
|
|
|
|
|
для: Mookapek
(08.09.2009 в 01:58)
| | Это, мягко говоря, противоречит задаче отсортировать строки по полю `date`.
Если об этом вспомнить, то будет так.
SELECT * FROM
(
SELECT `type`, `id_flats` AS `id`, `rooms`, `price`, `square`, `date` FROM flats
UNION ALL
SELECT `type`, `id_houses` AS `id`, `rooms`, `price`, `square`, `date` FROM houses
)AS `res`
ORDER BY `date`
|
| |
|
|
|
|
|
|
|
для: Trianon
(08.09.2009 в 01:38)
| | Не, floor должно быть. floor у меня этаж, а floors - этажность дома. | |
|
|
|
|
|
|
|
для: Mookapek
(08.09.2009 в 01:12)
| | например так:
SELECT flats.*, houses.*
FROM flats, houses
ORDER BY date
|
Но вот тут будут бока с тем что количество строк в таблицах не равное. Та что короче добьет недостающие строки повторами.
Но если уместно можно и лимит прилепить | |
|
|
|
|
|
|
|
для: Yakudza
(08.09.2009 в 01:42)
| | Вы написали чушь.
правда, чтобы быстро понять, что это чушь, строк в таблице должно быть хотя бы три. | |
|
|
|