Задавайте вопросы, мы ответим
Вы не зашли.
Всем привет!
В одной базе есть несколько таблиц, в каждой из которых содержится большое количество строк. Для выборки, из всех таблиц, строк созданных одним пользователем с id=1 пишу следующее:
SELECT * FROM table1, table2, table3 WHERE id=1
Но результата не получаю, result (в php) ничего не выдает, даже ошибок.
Пожалуйста, подскажите, что я делаю не так? В чем моя ошибка?
Неактивен
А Вы попробуйте явно указать из какой таблицы 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;
Неактивен
Пробовал, все равно результат нулевой.
Неактивен
Окей, приведите результаты запросов
SELECT * FROM table1 WHERE table1.id=1;
и
SELECT * FROM table2 WHERE table2.id=1;
и
SELECT * FROM table3 WHERE table3.id=1;
Неактивен
Не понял, какие результаты?
Неактивен
Запросы типа SELECT возвращают данные из таблиц(ы) (если они там есть). Нужно убедиться, что в табличках есть нужные данные
Неактивен
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)
Неактивен
Вы правильно поняли, мне нужные три отдельных результата. Приведите же их :-), нужны сами данные. из всех трех таблиц.
Неактивен
Я не могу понять в каком виде мне их вам предоставить. Данные полученные через result или как?
Неактивен
В любом виде, чтобы я видел сами данные.
Что-то типа
table1
id field1 field2
1 val1 val2
2 val3 val4
Неактивен
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;
По этому совету есть результат. Я не правильно писал запрос. Однако результат имеет много повторов, т. е. каждая строка повоторяется несколько раз
Неактивен
Конечно повторяется. Если приведете наконец сами таблицы, описание, что там находится - может быть мы совместными усилиями сможем написать корректный запрос .
Неактивен
deadka написал:
В любом виде, чтобы я видел сами данные.
Что-то типа
table1
id field1 field2
1 val1 val2
2 val3 val4
Я в sql новичок, подскажите как правильно получить подобные данные. Я данные загружаю в массив и потом просматриваю
Неактивен
Так и получить - SELECT * FROM `table1`
Приведите структуру таблиц - какие поля там содержатся, что за данные?
Неактивен
deadka написал:
Так и получить - SELECT * FROM `table1`
Приведите структуру таблиц - какие поля там содержатся, что за данные?
[Столбцы] => данные одной строки
[id] => 1
[city] => 1
[catalog] => 2
[status] => 0
[datastp] => 0
[action] => 1
[price] => 1950000
[destrict] => 2
[distance] => 0
[location1] => 20
И таких строк сотни
Неактивен
Очень хорошо, теперь то же самое для table2 и table3. Ну и на словах расскажите - как таблицы между собой соотносятся?
Неактивен
deadka написал:
Очень хорошо, теперь то же самое для table2 и table3. Ну и на словах расскажите - как таблицы между собой соотносятся?
В других таблицах такие же столбцы, отличительной особенностью у них является значение city. Оно во всех таблицах разное.
Отредактированно klk.pma (04.05.2014 22:56:58)
Неактивен
Может тогда Вам больше подойдёт
SELECT * FROM `table1` WHERE `table1`.`id` = 1
UNION
SELECT * FROM `table2` WHERE `table2`.`id` = 1
UNION
SELECT * FROM `table3` WHERE `table3`.`id` = 1
?
Неактивен
Я с UNION не знаком. Это все одним запросом пишется?
Неактивен
Обязательно познакомьтесь, полезная штука.
Да, я привел составленный sql-запрос
SELECT * FROM `table1` WHERE `table1`.`id` = 1 UNION SELECT * FROM `table2` WHERE `table2`.`id` = 1 UNION SELECT * FROM `table3` WHERE `table3`.`id` = 1;
Неактивен
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;
При подобном запросе результат почему-то отображается только из первой таблицы. Возможно опять что-то делаю не так.
Спасибо за помощь! Продолжу разбираться с этим вопросом завтра
Неактивен
Подозреваю, что во второй таблице (и третьей тоже) нет записей, у которых id равен 1.
Неактивен
Проверил, записи с таким id есть
Неактивен
Да? Тогда приведите результаты запросов
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;
Неактивен
Все сработало 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). Что выгоднее по работоспособности и имеет меньшую нагрузку на сервер?
Пожалуйста, подскажите, как правильно решить эти вопросы и оптимально вытаскивать данные из нескольких таблиц.
Неактивен