грубо говоря есть запрос [sql]select table_prefix from table where условие;[/sql] результат этого запроса нужно использовать в другом запросе в качестве имени таблицы. можно ли как-то поместить этот запрос в подзапрос? если да, то как это будет выглядеть? что-нить вроде этого? [sql]select поля from CONCAT((select table_prefix from table where условие),'_table') where условие;[/sql] ps: Ответ нужен срочно, поэтому на мануалы просто нет времени Pps: Просто интересно, поддерживают ли подзапросы многомерную вложенность?
А ждать ответа время есть? [sql]select поля from (select table_prefix from table where условие) where условие;[/sql] Покажи исходные запросы, может там JOIN'ом можно обойтись.
Это только префикс к имени таблицы, нужно еще окончание ставить. имеется таблица в БД в которой прописаны уникальное имя и префикс к связанными с ним таблицами. Во входных данных класса имеется это уникальное имя, и на основе его класс должен получить префикс имен таблиц, добавить окончание имен и сделать выборку строк. Может есть переменные в mysql которым можно было бы присвоить результат выполнения оператора, и использовать в следующем? дык я пока ответа жду - другое делаю.
у меня справочник по MySql под боком. Времени нет читать. Сейчас 11 вечера, завтра с утра уже надо чтоб все закончено было... поэтому просил работающий запрос. Ладно... тему на помойку, сам найду решение...
Короче вот такой бред получился в итоге: [sql]set @test = (concat('select field1, field2 from ', (select prefix from table_names where field1='param'), '_part_table_name')); prepare x from @test; execute x;[/sql] Я знаю, есть лучше решение, но вы его скрываете))
Топас, офигенные ответы, ниочем. вообще ниочем. Я даже несколько засомневался, а настолько ли ты знающий человек, как пытаешься показать?
а нормальны ответ один - НЕТ! а он пытался подсказать как можно иначе это сделать ... вопрос не очем - ну и ответ в стиле вопроса! (с высоты прожитых лет - далать надо теми средствами и методами , которые знаешь - а те что незнаешь изучать - но непытатся ими за час написать программу - точно выйдет фигня)
Xerk На провокацию не поддаюсь А если развернуть ответ, то вот что хотел бы сказать: Если мы хотим видеть наследование на уровне БД, то конечно, логично предположить, что есть одна таблица содержащит базовые поля. Таблицы-наследницы - расширение. Но! Почему я скептически отношусь к Вашей задаче: Если мы даже имеем такую структуру, то глупо, я подчеркиваю, просто очень глупо пытаться получить все "объекты" в одном запросе! У разных таблиц разные поля! Если и хотим получить общие поля, то достаточно обратиться к родительской таблице. А если вдруг поля у дочерних таблиц совпадают то бессмысленно было делать такое разделение. Теперь дошло?
топас, прочти внимательно плиз, что мне надо было-то Мне нужно из таблицы БД получить название другой таблицы и уже из другой таблицы выбрать значение. Может быть так, что из одной таблицы получаешь имя другой таблицы, из другой таблицы получаешь имя третей. И уже с третьей получаешь значение. Заранее известно только имя первой таблицы... как сделать это, чтоб эту цепочку можно было пройти одним запросом, не делая 2-3 запроса? добавлено: тот вариант что выше - работает, но он мне не нравится, корявый слишком(
То, о чем вы говорите - это объединением таблиц можно было бы добиться и АБСОЛЮТНО не то, о чем говорю я.
Я использую то что есть, придумывать другую структуру тупо времени нет, может потом. если начальство скажет.
Наткнулся на способ нормальной организации БД под мою задачу... Но вопрос о том, как еще можно было бы решить ту задачу, которую я описал изначально ( как использовать значение, возвращаемое селектом, в качестве имени/части имени другой таблицы, из которой уже и происходит выборка возвращаемой в скрипт информации) считаю открытым... Хотяб даже для саморазвития.
знатоки блин ответ ДА, есть способ пусть и корявенький, зато работает) не важно НАХРЕНА, важно что РАБОТАЕТ) ЗЫ: Кстати, запомните: чтоб знать чем плох какой-либо способ реализации, надо еще знать как этот способ реализовать)
RomanBush тут у меня просто, у меня был "адрес", вида /id1/id2 Обращаясь к таблице имя которой мне известно , получаю имя следующей таблицы ("id1"), в этой таблице хранится информация о имени таблицы "id2", с вот этой таблицы, уже и происходит выборка. в пхп формируется извращенный запрос [sql] set @table_name = (concat ((select prefix from root_table where table_id="id1"), '_childs')); set @query = (concat ('select prefix from ', @table_name, 'where table_id="id2"'), '_content')); prepare x from @query; set @table_name = (execute x); set @query = (concat('select field1, field2 from ', @table_name, ' where param="value"')); prepare x from @query; execute x; [/sql]
смысл этого в том, чтоб заставить строчку в переменной выполниться, получается в некотором роде аналог eval($query) в пхп [sql]prepare x from @query; execute x;[/sql] MySQL к сожалению не понимает записи вида select field1, field2 from @table_name where param="value"
Re: Можно ли использовать в качестве имени таблицы в запросе Написал в 14:50, потом тратил время на спор, а в 19:50 всё ещё был в ожидании ответа. На мануал ведь совсем-совсем времени нет, ио нужно срочно. В жалобах обсуждались необучаемые люди, люди не желающие читать мануал, люди грубые и ваще не хорошие. Вот товарисч явный пример. А как бы закончилось, если бы Xerk человек был хороший, душевный, я бы сказал: спросил бы у topas разьяснить и сейчас была бы переделаная таблица с нормальными отношениями разных видов и одним простым запросом в итоге.
lexa опять же ВНИМАТЕЛЬНО читай, я нашел решение. Со структурой БД, готовыми шаблонами запросов под мои нужды, и использовал его, необходимость в срочном ответе по первоначальному вопросу отпала. Освободившееся время я и тратил на спор, который мне интересен. ЗЫ: Что-то люди тут стали совсем невнимательные( весна, авитаминоз однако... Мозг надо подкормить)