facelift
Новичок
Попытка оптимизации INNER JOIN
Здравствуйте. Есть три таблички. Первые две содержат данные, третья - это таблица пересечения. Т.е. в третьей два столбца, в первом ключи первой таблицы, во втором ключи второй таблицы. Могу подробнее
[sql]
CREATE TABLE `messages` (
`id` int(11) unsigned NOT NULL auto_increment,
`message` text,
PRIMARY KEY (`id`)
);
CREATE TABLE `tags` (
`id` int(11) unsigned NOT NULL auto_increment,
`name` text character set latin1,
PRIMARY KEY (`id`)
);
CREATE TABLE `joints` (
`tag_id` int(11) default NULL,
`message_id` int(11) default NULL
);
[/sql]
Теперь мы делаем запрос с двумя join'ами
[sql]
SELECT messages.message, temp.name FROM messages INNER JOIN (SELECT tags.name, joints.message_id FROM tags INNER JOIN joints ON tags.id = joints.tag_id) as temp ON messages.id = temp.message_id
[/sql]
И получаем ответ, в котором текст сообщения дублируется для каждого тега.
Можно ли составить один запрос который бы тянул из базы все сразу? Сразу и сообщения и теги, и при этом ничего не дублировал? И, если можно его составить, как его обрабатывать в php?
Здравствуйте. Есть три таблички. Первые две содержат данные, третья - это таблица пересечения. Т.е. в третьей два столбца, в первом ключи первой таблицы, во втором ключи второй таблицы. Могу подробнее
[sql]
CREATE TABLE `messages` (
`id` int(11) unsigned NOT NULL auto_increment,
`message` text,
PRIMARY KEY (`id`)
);
CREATE TABLE `tags` (
`id` int(11) unsigned NOT NULL auto_increment,
`name` text character set latin1,
PRIMARY KEY (`id`)
);
CREATE TABLE `joints` (
`tag_id` int(11) default NULL,
`message_id` int(11) default NULL
);
[/sql]
Теперь мы делаем запрос с двумя join'ами
[sql]
SELECT messages.message, temp.name FROM messages INNER JOIN (SELECT tags.name, joints.message_id FROM tags INNER JOIN joints ON tags.id = joints.tag_id) as temp ON messages.id = temp.message_id
[/sql]
И получаем ответ, в котором текст сообщения дублируется для каждого тега.
Можно ли составить один запрос который бы тянул из базы все сразу? Сразу и сообщения и теги, и при этом ничего не дублировал? И, если можно его составить, как его обрабатывать в php?