MySQL динамическое JOIN - PullRequest
1 голос
/ 09 июля 2010

Допустим, у меня есть эти таблицы на моей базе данных:

items
categories
weapons
shields
swords

И мне нужно создать соединение следующим образом:

SELECT items.*, {swords}.*
FROM items
INNER JOIN categories
  ON categories.id = items.category_id # <-- here I know that the item is a sword
INNER JOIN {swords}
  ON {swords}.item_id = item.id
WHERE items.id = 12

Но часть {swords} является динамической, поскольку я обнаружил, что предметом является меч , проверяющий поле categories.name.

Запрос изменится, если categories.name будет " shield " к этому:

SELECT items.*, shields.*
FROM items
INNER JOIN categories
  ON categories.id = items.category_id
INNER JOIN shields
  ON shields.item_id = item.id
WHERE items.id = 13

Я использовал { и } вокруг swords, чтобы показать его как переменную

Спасибо за ваш ответ и извините за мой английский! :)

1 Ответ

1 голос
/ 09 июля 2010

Технически это можно сделать только с помощью динамического SQL - что означает Синтаксис подготовленного оператора MySQL или конкатенацию строк для создания запроса перед его отправкой в ​​базу данных. Подготовленные операторы являются предпочтительным выбором из-за лучшей защиты от внедрения SQL.

Вы можете использовать ЛЕВЫЕ СОЕДИНЕНИЯ к различным таблицам, но это будет означать включение многочисленных столбцов из каждой таблицы (оружие, щиты, мечи ...), которые будут нулевыми, если категория не будет соответствовать. Было бы ужасно пытаться извлечь данные из одного запроса ...

PS: Почему существует таблица SWORD? Разве это не охватывается таблицей WEAPON?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...