|
|
|
|
|
для: skolozhabskiy
(14.08.2011 в 14:53)
| | Лучше в массиве $galleries сразу сформировать запросы вида
$galleries[] = "SELECT * FROM $row['brandTable'] WHERE id=Таблица_№11.prodId AND name=Таблица_№11.prodName";
А потом их объединять при помощи implode() в конечный запрос
$query = implode(" UNION ", $galleries); | |
|
|
|
|
|
|
|
для: skolozhabskiy
(14.08.2011 в 12:44)
| | есть 10 одинаковых таблиц (имена полей или столбцов) с разными данными
в чем смысл такой организации таблиц в БД?
какой самый простой и "элегантный" путь решения проблемы.
"элегантнее" всего не решать проблемы, а не создавать их себе | |
|
|
|
|
|
|
|
для: cheops
(14.08.2011 в 14:35)
| | спасибо за ответ, а как в данном случае использовать UNION? можете привести пример? спасибо
ну, допустим из
$user = 'sasa';
$query = "SELECT DISTINCT `tableName` FROM `Таблица_№11` WHERE `user`='$user'";
$result = mysql_query($query);
while ($row = mysql_fetch_assoc($result)) {
$galleries[] = $row['brandTable'];
}
можно получить массив $galleries имен таблиц в виде "Таблица_№1", "Таблица_№2" и "Таблица_№7" и как это дальше использовать?
$ids = join(',',$galleries);
$query = "SELECT * FROM $ids WHERE id=Таблица_№11.prodId AND name=Таблица_№11.prodName";
так тоже не работает
как в данном случае использовать UNION?
спасибо | |
|
|
|
|
|
|
|
для: skolozhabskiy
(14.08.2011 в 12:44)
| | FROM не поддерживает динамические имена таблиц, динамическое имя можно подставить только через переменную в клиентском языке или через локальные переменные SQL. Самый лучший вариант в этом случае UNION. | |
|
|
|
|
|
|
| добрый день
1. есть 10 одинаковых таблиц (имена полей или столбцов) с разными данными:
например,
Таблица_№1
Таблица_№2
Таблица_№3
Таблица_№4
.......
Таблица_№10
2. имена этих таблиц динамически заносятся в поле "tableName" другой таблицы "таблица_№11" в зависимости от того что выбирает пользователь - ноутбук какой-то марки, карандаш, резинку разной твердости или ручку, например:
id user product tableName prodId
1 sasa ноутбук Т Таблица_№1 3
2 dara карандаш Таблица_№5 1
3 sasa ручка Таблица_№2 6
4 sasa резинка-тверд. Таблица_№7 1
5 sasa ноутбук М Таблица_№1 5
6 sasa резинка-мягкая Таблица_№7 2
и так далее, число таблиц занесенных в таблицу "таблица_№11" может меняться динамически. какие-то добавляются, какие-то удаляются в зависимости от поля user.
Получить имена таблиц относящиеся к пользователю "sasa" поля "user" и с исключением повторений можно так:
$user = 'sasa';
$query = "SELECT DISTINCT `tableName` FROM `Таблица_№11` WHERE `user`='$user'";
$result = mysql_query($query)
В результате мы получим: "Таблица_№1", "Таблица_№2" и "Таблица_№7". То есть для пользователя sasa необходимо выбрать данные из этих таблиц. Здесь все понятно.
Вопрос: как одим запросом, зная имена таблиц (поле "tableName") для пользователя "sasa" и идентификационный номер просмотренного товара "prodId" в этих таблицах, получить соответствующие данные об этом товаре из всех таблиц последовательно без циклов?
запрос типа:
$query = "SELECT * FROM (SELECT DISTINCT `tableName` FROM `Таблица_№11` WHERE `user`='$user')";
не работает.
никаких перекрещиваний, объединений нет (UNION, JOIN и так далее), просто необходимо последовательно, зная имена таблиц и id товара, на которые ссылается запись-выборка "sasa", выбрать требуемые данные о нем.
какой самый простой и "элегантный" путь решения проблемы.
спасибо за любой совет и помощь. | |
|
|
|
|