SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

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

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

Вы не зашли.

#1 04.05.2014 22:14:14

klk.pma
Участник
Зарегистрирован: 04.05.2014
Сообщений: 23

Как выбрать строки из нескольких таблиц?

Всем привет!
В одной базе есть несколько таблиц, в каждой из которых содержится большое количество строк. Для выборки, из всех таблиц, строк созданных одним пользователем с id=1 пишу следующее:
SELECT * FROM table1, table2, table3 WHERE id=1
Но результата не получаю, result (в php) ничего не выдает, даже ошибок.

Пожалуйста, подскажите, что я делаю не так? В чем моя ошибка?

Неактивен

 

#2 04.05.2014 22:19:03

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Как выбрать строки из нескольких таблиц?

А Вы попробуйте явно указать из какой таблицы id.
SELECT * FROM table1, table2, table3 WHERE table1.id=1;
или
SELECT * FROM table1, table2, table3 WHERE table2.id=1;
или
SELECT * FROM table1, table2, table3 WHERE table3.id=1;


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 04.05.2014 22:26:12

klk.pma
Участник
Зарегистрирован: 04.05.2014
Сообщений: 23

Re: Как выбрать строки из нескольких таблиц?

Пробовал, все равно результат нулевой.

Неактивен

 

#4 04.05.2014 22:28:10

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Как выбрать строки из нескольких таблиц?

Окей, приведите результаты запросов
SELECT * FROM table1 WHERE table1.id=1;
и
SELECT * FROM table2 WHERE table2.id=1;
и
SELECT * FROM table3 WHERE table3.id=1;


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 04.05.2014 22:32:13

klk.pma
Участник
Зарегистрирован: 04.05.2014
Сообщений: 23

Re: Как выбрать строки из нескольких таблиц?

Не понял, какие результаты?

Неактивен

 

#6 04.05.2014 22:34:11

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Как выбрать строки из нескольких таблиц?

Запросы типа SELECT возвращают данные из таблиц(ы) (если они там есть). Нужно убедиться, что в табличках есть нужные данные


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 04.05.2014 22:34:29

klk.pma
Участник
Зарегистрирован: 04.05.2014
Сообщений: 23

Re: Как выбрать строки из нескольких таблиц?

deadka написал:

Окей, приведите результаты запросов
SELECT * FROM table1 WHERE table1.id=1;
и
SELECT * FROM table2 WHERE table2.id=1;
и
SELECT * FROM table3 WHERE table3.id=1;

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

Отредактированно klk.pma (04.05.2014 22:35:08)

Неактивен

 

#8 04.05.2014 22:36:05

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Как выбрать строки из нескольких таблиц?

Вы правильно поняли, мне нужные три отдельных результата. Приведите же их :-), нужны сами данные. из всех трех таблиц.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#9 04.05.2014 22:39:14

klk.pma
Участник
Зарегистрирован: 04.05.2014
Сообщений: 23

Re: Как выбрать строки из нескольких таблиц?

Я не могу понять в каком виде мне их вам предоставить. Данные полученные через result или как?

Неактивен

 

#10 04.05.2014 22:41:18

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Как выбрать строки из нескольких таблиц?

В любом виде, чтобы я видел сами данные.
Что-то типа

table1
id field1 field2
1 val1   val2
2 val3   val4


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#11 04.05.2014 22:41:39

klk.pma
Участник
Зарегистрирован: 04.05.2014
Сообщений: 23

Re: Как выбрать строки из нескольких таблиц?

deadka написал:

А Вы попробуйте явно указать из какой таблицы id.
SELECT * FROM table1, table2, table3 WHERE table1.id=1;
или
SELECT * FROM table1, table2, table3 WHERE table2.id=1;
или
SELECT * FROM table1, table2, table3 WHERE table3.id=1;

По этому совету есть результат. Я не правильно писал запрос. Однако результат имеет много повторов, т. е. каждая строка повоторяется несколько раз

Неактивен

 

#12 04.05.2014 22:44:11

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Как выбрать строки из нескольких таблиц?

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


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#13 04.05.2014 22:46:27

klk.pma
Участник
Зарегистрирован: 04.05.2014
Сообщений: 23

Re: Как выбрать строки из нескольких таблиц?

deadka написал:

В любом виде, чтобы я видел сами данные.
Что-то типа

table1
id field1 field2
1 val1   val2
2 val3   val4

Я в sql новичок, подскажите как правильно получить подобные данные. Я данные загружаю в массив и потом просматриваю

Неактивен

 

#14 04.05.2014 22:48:41

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Как выбрать строки из нескольких таблиц?

Так и получить - SELECT * FROM `table1`
Приведите структуру таблиц - какие поля там содержатся, что за данные?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#15 04.05.2014 22:51:53

klk.pma
Участник
Зарегистрирован: 04.05.2014
Сообщений: 23

Re: Как выбрать строки из нескольких таблиц?

deadka написал:

Так и получить - SELECT * FROM `table1`
Приведите структуру таблиц - какие поля там содержатся, что за данные?

[Столбцы] => данные одной строки
[id] => 1
[city] => 1
[catalog] => 2
[status] => 0
[datastp] => 0
[action] => 1
[price] => 1950000
[destrict] => 2
[distance] => 0
[location1] => 20

И таких строк сотни

Неактивен

 

#16 04.05.2014 22:53:45

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Как выбрать строки из нескольких таблиц?

Очень хорошо, теперь то же самое для table2 и table3. Ну и на словах расскажите - как таблицы между собой соотносятся?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#17 04.05.2014 22:55:53

klk.pma
Участник
Зарегистрирован: 04.05.2014
Сообщений: 23

Re: Как выбрать строки из нескольких таблиц?

deadka написал:

Очень хорошо, теперь то же самое для table2 и table3. Ну и на словах расскажите - как таблицы между собой соотносятся?

В других таблицах такие же столбцы, отличительной особенностью у них является значение city. Оно во всех таблицах разное.

Отредактированно klk.pma (04.05.2014 22:56:58)

Неактивен

 

#18 04.05.2014 22:58:17

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Как выбрать строки из нескольких таблиц?

Может тогда Вам больше подойдёт

SELECT * FROM `table1` WHERE `table1`.`id` = 1
UNION
SELECT * FROM `table2` WHERE `table2`.`id` = 1
UNION
SELECT * FROM `table3` WHERE `table3`.`id` = 1

?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#19 04.05.2014 23:01:51

klk.pma
Участник
Зарегистрирован: 04.05.2014
Сообщений: 23

Re: Как выбрать строки из нескольких таблиц?

Я с UNION не знаком. Это все одним запросом пишется?

Неактивен

 

#20 04.05.2014 23:04:18

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Как выбрать строки из нескольких таблиц?

Обязательно познакомьтесь, полезная штука.

Да, я привел составленный sql-запрос



SELECT * FROM `table1` WHERE `table1`.`id` = 1 UNION SELECT * FROM `table2` WHERE `table2`.`id` = 1 UNION SELECT * FROM `table3` WHERE `table3`.`id` = 1;


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#21 04.05.2014 23:07:02

klk.pma
Участник
Зарегистрирован: 04.05.2014
Сообщений: 23

Re: Как выбрать строки из нескольких таблиц?

deadka написал:

Обязательно познакомьтесь, полезная штука.

Да, я привел составленный sql-запрос



SELECT * FROM `table1` WHERE `table1`.`id` = 1 UNION SELECT * FROM `table2` WHERE `table2`.`id` = 1 UNION SELECT * FROM `table3` WHERE `table3`.`id` = 1;

При подобном запросе результат почему-то отображается только из первой таблицы. Возможно опять что-то делаю не так.
Спасибо за помощь! Продолжу разбираться с этим вопросом завтра

Неактивен

 

#22 04.05.2014 23:08:43

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Как выбрать строки из нескольких таблиц?

Подозреваю, что во второй таблице (и третьей тоже) нет записей, у которых id равен 1.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#23 04.05.2014 23:10:07

klk.pma
Участник
Зарегистрирован: 04.05.2014
Сообщений: 23

Re: Как выбрать строки из нескольких таблиц?

Проверил, записи с таким id есть

Неактивен

 

#24 04.05.2014 23:12:20

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Как выбрать строки из нескольких таблиц?

Да? Тогда приведите результаты запросов

1)

SELECT * FROM `table2` WHERE `table2`.`id` = 1;

2)

SELECT * FROM `table3` WHERE `table3`.`id` = 1;

3)

SELECT * FROM `table2` WHERE `table2`.`id` = 1 UNION SELECT * FROM `table3` WHERE `table3`.`id` = 1;


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#25 05.05.2014 13:19:32

klk.pma
Участник
Зарегистрирован: 04.05.2014
Сообщений: 23

Re: Как выбрать строки из нескольких таблиц?

Все сработало UNION выдает результат нормально. Это были мои ошибки и невнимательность

Структура таблиц следующая:
Table1a
[Столбцы] => данные одной строки
[id] => 1 [city] => 1 [catalog] => 2 [status] => 0 [datastp] => 0 [action] => 1 [price] => 195000 [destrict] => 2 [distance] => 0 [location1] => 20

Table2a
[Столбцы] => данные одной строки
[id] => 1 [city] => 1 [catalog] => 2 [status] => 1 [datastp] => 0 [action] => 1 [price] => 185000 [destrict] => 5 [location12] => 20 [paramZ] => 0 [paramX] => 10

Table3a
[Столбцы] => данные одной строки
[id] => 1 [city] => 1 [catalog] => 2 [status] => 0 [datastp] => 0 [action] => 1 [price] => 175000 [destrict] => 1 [location211] => 20

В базе таких таблиц более 150 и они имеют совпадение по названию и количеству столбцов:
Table1b по структуре повторяет Table1a
Table2b по структуре повторяет Table2a
Table3b по структуре повторяет Table3a

Единственное отличие, которое никогда не повторяется это значение city. Например в Table1a, Table2a, Table3a city=1, а в Table1b, Table2b, Table3b city=2 и так далее

В связи с этим возникают несколько вопросов:
1. если проходиться по всем таблицам (153 штуки) с помощью UNION, то получается очень длинный запрос. Может есть вариант сделать короче?
2. как 1 пункт будет влиять на работоспособность и нагрузку на сервер, если запросов около 300 в минуту?
3. если уменьшить количество таблиц за счет слияния (например в Table1a запихнуть Table2a и Table3a), то значительно увеличивается число строк. У некоторых из них будут неиспользуемые столбцы (пустые или с 0). Что выгоднее по работоспособности и имеет меньшую нагрузку на сервер?

Пожалуйста, подскажите, как правильно решить эти вопросы и оптимально вытаскивать данные из нескольких таблиц.

Неактивен

 

Board footer

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