Что-то, с чем я спотыкался какое-то время. У меня есть таблица под названием gears
, которая содержит строки с именами: id
, mid
, cid
и installed
. Я хочу искать эту таблицу и возвращать в формате csv список mid
s для некоторых уникальных cid
. Например, если cid = $cid
я могу использовать:Динамический запрос MySQL: присоединяйтесь к результатам из многочисленных таблиц
$query = $database -> query("SELECT COUNT(mid), GROUP_CONCAT(mid) FROM gears WHERE cid=$cid", __LINE__, __FILE__);
$gears_installed = $database -> get_result($query);
$gears = $database -> get_result($query, 0, 1);
Не беспокойтесь об именах функций, они делают именно так, как можно было бы ожидать. Так что если бы было 3 ряда для этой конкретной $cid
, с mid
с: bank
, lottery
и post
тогда $gears_installed
будет равно 3 и $gears
будет равна bank,lottery,post
. Это работает по назначению.
Теперь на вопрос у меня есть. Каждый уникальный mid
имеет свою собственную таблицу, названную settings_mid_here
. I.e, для вышеупомянутых трех я имею таблицы settings_bank
, settings_lottery
и, наконец, settings_post
. Каждая из этих таблиц также будет иметь столбец, называемый cid
(так они могут быть связаны между собой). Как мне запустить один запрос, чтобы вернуть всю строку из каждой таблицы, где cid=$cid
? Я не хочу запускать отдельный запрос для SELECT * FROM settings_bank WHERE cid=$cid
и SELECT * FROM settings_post WHERE cid=$cid
и, наконец, SELECT * FROM settings_post WHERE cid=$cid
, так как это может привести к появлению около 10 дополнительных запросов при загрузке одной страницы (на данный момент 10 разных mid
).
Как вы можете видеть, проблема динамична. Он должен иметь возможность адаптироваться к другому номеру mid
s, каким-то образом различать настройки в каждой таблице (например, settings_bank
может иметь столбец с именем name
, и поэтому может быть settings_post
). Наконец, он также должен иметь возможность возвращать строку по умолчанию (а не нулевые значения), если не существует строки, соответствующей заданному $cid
.
Сложная задача, но я надеюсь, что кто-то может помочь мне в этом, так как я не смог никуда добраться.
У меня есть некоторые идеи, но я мог бы только помочь, если бы у меня была дамп некоторой схемы и некоторых демо-данных для проверки запросов. В противном случае это просто разумная догадка. – Fleshgrinder
Вы имеете в виду, что вы создадите новую таблицу каждый раз, когда в таблице 'gears' появится новая' mid'? – geomagas
http://sqlfiddle.com/#!2/cc5ce/1 Использование cid = 3 –