Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выбрать из нескольких таблиц
 
 автор: Mookapek   (07.09.2009 в 22:45)   письмо автору
 
 

Требуется произвести выборку всех записей из 3 таблиц и отсортировать результат по полю date, находящемуся в каждой из трех таблице. Как это сделать?

  Ответить  
 
 автор: heed   (07.09.2009 в 23:07)   письмо автору
 
   для: Mookapek   (07.09.2009 в 22:45)
 

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

Если у таблиц одинаковое колличество и типы полей (или запросы возвращают одинаковое) можно слить при помощи UNION три запроса в один

Если ничего такого нет , то это три запроса, но уже лучше тем что меньше данных в одном результате == меньше нагрузки на сервер (если таблицы приличного размера)

  Ответить  
 
 автор: Mookapek   (08.09.2009 в 00:09)   письмо автору
 
   для: heed   (07.09.2009 в 23:07)
 

У меня разное количество полей во всех таблицах. То есть 3 запроса - единственный выход?

  Ответить  
 
 автор: Trianon   (08.09.2009 в 00:15)   письмо автору
 
   для: Mookapek   (08.09.2009 в 00:09)
 

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

  Ответить  
 
 автор: Mookapek   (08.09.2009 в 00:26)   письмо автору
 
   для: Trianon   (08.09.2009 в 00:15)
 

Структура в каком смысле? Есть 3 таблицы, там много-много полей. Есть поля одинаковые во всех трех таблицах, есть разные. Количество полей у таблиц разное, есть поле с датой.
Надо получить данные , допустим, из пяти полей, одинаковых для всех таблиц. Например field1 - field4 и date.

  Ответить  
 
 автор: Trianon   (08.09.2009 в 00:30)   письмо автору
 
   для: Mookapek   (08.09.2009 в 00:26)
 

Надо привести пример, чтобы понять принцип.
Вы можете упростить имеющиеся таблицы, или придумать три разные (с двумя-четырьмя полями) таблицы "от балды".
Допустим разные и допустим одинаковые - это не одно и то же.

Но приводить пример придется. Не только с полной структурой, но и со строками.
И с ожидаемым результатом.

>Структура в каком смысле?

...!
Структурой называют полное описание таблицы. В идеале - текст SQL-оператора CREATE TABLE

  Ответить  
 
 автор: Mookapek   (08.09.2009 в 01:12)   письмо автору
 
   для: 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 таблицы, уменьшил число полей. Надо выбрать данные из полей

  Ответить  
 
 автор: Trianon   (08.09.2009 в 01:24)   письмо автору
 
   для: 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:37)   письмо автору
 
   для: 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');

  Ответить  
 
 автор: Trianon   (08.09.2009 в 01:38)   письмо автору
 
   для: Mookapek   (08.09.2009 в 01:37)
 

и наконец, последнее. Нарисуйте четыре строки, которые, по Вашему, представили бы результат требуемого Вам запроса.
В этих строках должны быть одинаковые типы и одинаковое число колонок.
Значения в некоторых полях могут отсутствовать.

UPD . Первый CREATE TABLE содержит ошибку. Я попробовал убрать строку floor (явно левую) .
Получил несоответствие числа полей INSERT числу полей таблицы.

  Ответить  
 
 автор: Mookapek   (08.09.2009 в 01:58)   письмо автору
 
   для: 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 |
------+----+-------+---------+--------+---------------------+

  Ответить  
 
 автор: Trianon   (08.09.2009 в 02:12)   письмо автору
 
   для: 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` 

  Ответить  
 
 автор: Mookapek   (08.09.2009 в 02:01)   письмо автору
 
   для: Trianon   (08.09.2009 в 01:38)
 

Не, floor должно быть. floor у меня этаж, а floors - этажность дома.

  Ответить  
 
 автор: Yakudza   (08.09.2009 в 01:42)   письмо автору
 
   для: Mookapek   (08.09.2009 в 01:12)
 

например так:
SELECT flats.*, houses.*
FROM flats, houses
ORDER BY date

Но вот тут будут бока с тем что количество строк в таблицах не равное. Та что короче добьет недостающие строки повторами.
Но если уместно можно и лимит прилепить

  Ответить  
 
 автор: Trianon   (08.09.2009 в 01:46)   письмо автору
 
   для: Yakudza   (08.09.2009 в 01:42)
 

Вы написали чушь.
правда, чтобы быстро понять, что это чушь, строк в таблице должно быть хотя бы три.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования