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

Форум MySQL

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

 

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

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

тема: поиск данных в таблицах, названия которых выбирается из другой таблицы
 
 автор: vafir   (19.05.2010 в 12:26)   письмо автору
 
 

Уважаемые форумчане, подскажите пожалуйста как можно организовать один запрос таким образом, чтобы первым подзапросом я вытаскивал из таблицы 1 названия таблиц (допустим "таблица 1", "таблица 2"), а потом из таблицы 1 и таблицы 2 вытаскивал данные с помощью проверок. В голове вертится что-то наподобие этого
SELECT `data` FROM (
SELECT `name` FROM `таблица 1`
) X WHERE X.`id` = '123'

  Ответить  
 
 автор: root   (19.05.2010 в 12:49)   письмо автору
 
   для: vafir   (19.05.2010 в 12:26)
 

Одним никак.
Можно сделать что-то вроде:
SET @table = (select name from таблица 1 where ... );
SET @stmt = CONCAT('SELECT `data` FROM ', @table, ' WHERE ...');
PREPARE stmt FROM @stmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;


хотя зачем Вам такое вообще нужно, неясно...

  Ответить  
 
 автор: vafir   (19.05.2010 в 13:29)   письмо автору
115.6 Кб
 
   для: root   (19.05.2010 в 12:49)
 

в таблице paid_money хранится количество денег, выплаченных сотруднику за отработанный план, за бонус и др. В таблице paid_money_type хранятся записи с названиямми табличек, за которые выплачиваются деньги. Нужно вывести 10 последних записей из таблицы paid_money, которые принадлежат конкретному сотруднику (у нас есть его идентификатор).
Чтобы не делать поиск 10 записей paid_money по планам, затем 10 записей по бонусам, потом сортировать полученные данные по id найденных paid_money я и попытался отделаться одним запросом. Может у Вас есть какой-нибудь эффективный способ выборки этих записей? Сразу оговорюсь, чтобы не нарушить нормализацию я не добавляю id_employee в paid_money

  Ответить  
 
 автор: root   (19.05.2010 в 14:19)   письмо автору
 
   для: vafir   (19.05.2010 в 13:29)
 

чёто Ваша схема "невалидная" какая-то...

P.S.
Про таблички не понял.

  Ответить  
 
 автор: vafir   (19.05.2010 в 14:42)   письмо автору
 
   для: root   (19.05.2010 в 14:19)
 

да вроде все валидно сделано. А что конкретно непонятно?

  Ответить  
 
 автор: root   (19.05.2010 в 14:55)   письмо автору
 
   для: vafir   (19.05.2010 в 14:42)
 

я не вижу связи между таблицами plan -> paid_money и employee_bonus -> paid_money.
Какими полями они связаны?

P.S.
про таблички понял :)

  Ответить  
 
 автор: vafir   (19.05.2010 в 15:28)   письмо автору
 
   для: root   (19.05.2010 в 14:55)
 

paid_money.id_parent=plan.id и т.д Вот забил примерчик, чтобы нагляднее было

Employee:
id=1, Иванов ....
id=2, Петров .... !!!!!

Employee_bonus :
id=1, id_employee=2, ......!!!!

Paid_money:
id=1, id_type=3, id_parent=2, ......
id=2, id_type=1, id_parent=1, ...... !!!!!

Paid_money_type:
id=1, name=employee_bonus ... !!!!!!
id=2, name=employee_balance ...
id=3, name=plan

Допустим нам дан id_employee=2

Я хочу получить все данные по деньгам данного сотрудника из таблички paid_money, для этого я должен найти запись соответствующую
`paid_money`.`id_parent`=`employee_bonus`.`id` и `employee_bonus`.`id_employee`=$id_employee.
Но я еще не знаю такую таблицу `employee_bonus` пока я не достал ее из из `paid_money_type`.`name`, где `Paid_money_type`.`id`=`paid_money`.`id_type`.
Вот это у меня и не получается, но я слышал, что как-то это можно провернуть, но не могу найти правильный синтаксис.
В результате запроса я должен получть данные paid_money из строки №2

  Ответить  
 
 автор: root   (19.05.2010 в 17:59)   письмо автору
 
   для: vafir   (19.05.2010 в 15:28)
 

ёлы-палы.. Что ж всё так через жо.. запущено то..
Вы откровенно в жо.. тяжелой ситуации оказались.

id_parent - это своего рода foreign key на несколько таблиц одновременно.. интересно..
Как по мне, нужно было сразу создавать FK в таблицах bonus, plan и т.д. на paid_money
И тогда не нужна никакая "таблица с таблицами".
Ну и в самой paid_money FK на employee_id.

Что касается Вашей задачи.. Если честно - хз как это сделать.

  Ответить  
 
 автор: vafir   (20.05.2010 в 10:09)   письмо автору
 
   для: root   (19.05.2010 в 17:59)
 

уговорил начальство отказаться от этой затеи и сделать по человечески, в этом есть и Ваша заслуга, спасибо!

  Ответить  
 
 автор: Trianon   (19.05.2010 в 20:52)   письмо автору
 
   для: vafir   (19.05.2010 в 13:29)
 

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

  Ответить  
 
 автор: oliss   (20.05.2010 в 09:18)   письмо автору
 
   для: root   (19.05.2010 в 12:49)
 

А что означает собака
 FROM @stmt; 
?

  Ответить  
 
 автор: root   (20.05.2010 в 10:57)   письмо автору
 
   для: oliss   (20.05.2010 в 09:18)
 

переменная

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

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