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

Форум MySQL

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: последовательная выборка из нескольких таблиц

Сообщения:  [1-5] 

 
 автор: cheops   (14.08.2011 в 18:42)   письмо автору
 
   для: 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);

  Ответить  
 
 автор: Valick   (14.08.2011 в 17:41)   письмо автору
 
   для: skolozhabskiy   (14.08.2011 в 12:44)
 

есть 10 одинаковых таблиц (имена полей или столбцов) с разными данными
в чем смысл такой организации таблиц в БД?
какой самый простой и "элегантный" путь решения проблемы.
"элегантнее" всего не решать проблемы, а не создавать их себе

  Ответить  
 
 автор: skolozhabskiy   (14.08.2011 в 14:53)   письмо автору
 
   для: 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?

спасибо

  Ответить  
 
 автор: cheops   (14.08.2011 в 14:35)   письмо автору
 
   для: skolozhabskiy   (14.08.2011 в 12:44)
 

FROM не поддерживает динамические имена таблиц, динамическое имя можно подставить только через переменную в клиентском языке или через локальные переменные SQL. Самый лучший вариант в этом случае UNION.

  Ответить  
 
 автор: skolozhabskiy   (14.08.2011 в 12:44)   письмо автору
 
 

добрый день

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", выбрать требуемые данные о нем.

какой самый простой и "элегантный" путь решения проблемы.

спасибо за любой совет и помощь.

  Ответить  

Сообщения:  [1-5] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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