Помогите создать запрос

fonbaron

Велосипедист
Добрый день. Помогите мне правильно создать запрос.
Вот что есть
Есть несколько таблиц.
в одной общей(basis) хранится информация о том в какой таблице хранится материал(те по типу - например page или news) а так же какой шаблон прикреплен из таблицы tpl. Необходимо каким то образом получить данные срузу из трех таблиц
вот пример записи в таблице в которой хрантся вся инофрмация basis:
id-100 -уникальный номер документа
table-news -название таблицы в которой хранится документ
tpl-5 -номер шаблона
Таблица news
id-100 -уникальный номер документа как и в таблице
content-<html/>-контент
таблица tpl
id-5 -уникальный номер документа как и в таблице =tpl-5
content-<html/>-шаблон
и вот сам вопрос
зная уникальный номер документа в данном случае 100 можно ли получить в одном запросе соответствующие данные из таблицы с документом и шаблоном
 

Breeze

goshogun
Команда форума
Партнер клуба
из-за того, что в basis хранится название другой таблицы, сделать одним запросом нельзя.
сделай двумя, ничего страшного от этого не произойдет.
 

SiZE

Новичок
В качестве имени таблицы нельзя использовать значение поля. Но, т.к. мы знаем что у нас запросили, т.е. это новости или обычная страница мы можем сделать так.

PHP:
// здесь определяем тип загружаемой страницы, сами сделаете, и руками прописываем имя таблицы
$table = 'news';
$id = 100;

$query = mysql_query("SELECT * FROM ".$table." as n INNER JOIN basis as b ON( b.id=n.id ) INNER JOIN tpl as t ON( t.id=b.id ) WHERE n.id=".$id." AND b.table='".$table."' ");
 

Фанат

oncle terrible
Команда форума
Осталось понять, для чего нужны все эти уникальные номера и таблица basis. Особенно учитывая тот факт, что другие сайты прекрасно обходятся без неё.
 

fonbaron

Велосипедист
В качестве имени таблицы нельзя использовать значение поля.
Почему нельзя?
PHP:
// здесь определяем тип загружаемой страницы, сами сделаете, и руками прописываем имя таблицы
$table = 'news';
$id = 100;

$query = mysql_query("SELECT * FROM ".$table." as n INNER JOIN basis as b ON( b.id=n.id ) INNER JOIN tpl as t ON( t.id=b.id ) WHERE n.id=".$id." AND b.table='".$table."' ");
Нет Вы не верно поняли я спросил можно ли все сделать в одном запросе а то что запросом я вытащу тип страницы а потом другим запросом вытащу остальную информацию это понятно и ребенку
 

Фанат

oncle terrible
Команда форума
Он имел в виду что при джойне нельзя.

если же говорить о детях, то ребёнку так же понятно, что
а) вытащить одним запросом нельзя
б) нет ни одной причины хотеть этого
в) как нет ни одной причины иметь таблицу basis и определять по ней таблицу для поиска.

имя контроллера-обработчика запроса (а не таблицы) надо брать из урла
а дальше уже контроллер будет знать, из какой таблицы брать текст новости, и какой накатывать шаблон
 

Фанат

oncle terrible
Команда форума
Нет. Таких глупостей на олимпиадах не задают :)
 

Breeze

goshogun
Команда форума
Партнер клуба
да хоть на звание чемпиона мира, нельзя так сделать, не используя всякие хранимые процедуры, с которыми все-равно будет больше одного запроса, пусть и не так явно.
 

fonbaron

Велосипедист
в) как нет ни одной причины иметь таблицу basis и определять по ней таблицу для поиска.
Причина - чпу в котором юрл может называть пользователь как хочет например(qwe.html)
имя контроллера-обработчика запроса (а не таблицы) надо брать из урла
а дальше уже контроллер будет знать, из какой таблицы брать текст новости, и какой накатывать шаблон
И соответственно как получить имя контроллера?
Если объясните буду признателен.

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

Фанат

oncle terrible
Команда форума
если есть реальная необходимость давать страницам рандомные имена, то без таблицы-связки действительно не обойтись.

но я что-то не встречал сайтов, на которых бы пользователи хотели запутать посетителей

к примеру, адрес этой страницы - /talk/threads/Помогите-создать-запрос.73442/ - очень удобен. И нет никакой причины называть её qwe.html
 

fonbaron

Велосипедист
если есть реальная необходимость давать страницам рандомные имена, то без таблицы-связки действительно не обойтись.

но я что-то не встречал сайтов, на которых бы пользователи хотели запутать посетителей

к примеру, адрес этой страницы - /talk/threads/Помогите-создать-запрос.73442/ - очень удобен. И нет никакой причины называть её qwe.html

В системе управления амиро можно сделать все страницы 2 уровня(url типа http://site/qwe.html) хотя на самом деле они в базе могут быть и 10 уровнем.
А причина сео
 

Breeze

goshogun
Команда форума
Партнер клуба
В системе управления амиро можно сделать все страницы 2 уровня(url типа http://site/qwe.html) хотя на самом деле они в базе могут быть и 10 уровнем.
А причина сео
для этого нужна ровно одна таблица -- маппинг url -> id
с нее же можно поиметь плюшки типа шорткатов и алиасов
 

Фанат

oncle terrible
Команда форума
если это документы, то они хранятся в одной таблице.
если это различные страницы сайта, обслуживаемые разными контроллерами, у которых урлы строятся по различным правилам, то в таблице алиасов должен храниться урл, который и передается фронт-контроллеру для разбора.
 

fonbaron

Велосипедист
если это документы, то они хранятся в одной таблице.
если это различные страницы сайта, обслуживаемые разными контроллерами, у которых урлы строятся по различным правилам, то в таблице алиасов должен храниться урл, который и передается фронт-контроллеру для разбора.
Нет мне не так надо. Не будет ни чего привязываться к контроллерам.
Вы мне тоже самое предлагаете сделать только программным способом да еще и для каждого типа документа
 

Sna@IK

Новичок
Я, наверное, плохо понял вашу задачу. Вам принципиально важно достать эти данные ОДНИМ запросом?
И, опять же, если я правильно понял, почему вы не можете в вашу таблицу данных (basis) добавить еще и идентификационный номер материала из таблицы?
 

Фанат

oncle terrible
Команда форума
не принципиально ему. он просто так спрашивает.
 
Сверху