/ / Свързване на таблици въз основа на стойността на референтната таблица - php, mysql, database, join, normalization

Свързване на таблици въз основа на стойността на референтната таблица - php, mysql, база данни, присъединяване, нормализация

Имайте тези таблици въведете описанието на изображението тук

и дадени post_map.tag_id="1", Бих искал да получа: въведете описанието на изображението тук

таблицата entity_type определя коя таблица да изглеждаin, т.е. коя таблична entity_id се съхранява. Основната ми цел е да получа тази таблица в резултат на mysqli :: multi_query () или mysqli :: query (), т.е. без PHP да върви напред и назад към базата данни няколко пъти; тази таблица може да има много много редове и да получите тази маса наведнъж би била много по-ефективна.

Моите опити досега:

  • Опитах да използвам клаузата JOIN, но не знам как да използвам стойността на реда на предишния SELECT като име на таблицата за клаузата JOIN.
  • Опитни подготвени статии, но не могат да формират нищо, което да бъде използвано.

Отговори:

1 за отговор № 1

Това може да бъде направено от IF () и JOIN. Имам решение за вас, стартирайте под заявката ...

SELECT et.type,
IF(et.type="resource",r.resource_type_id,NULL) AS resource_type_id,
IF(et.type="resource",r.value,NULL) AS value,
IF(et.type="user",u.name,NULL) AS name,
IF(et.type="link",l.source,NULL) AS source,
IF(et.type="link",l.count,NULL) AS count
FROM `post_map` as pm
JOIN `entity_type` as et ON pm.entity_id = et.id
LEFT JOIN `resource` as r ON pm.entity_type_id=r.id
LEFT JOIN `user` as u ON pm.entity_type_id=u.id
LEFT JOIN `link` as l ON pm.entity_type_id=l.id
WHERE pm.tag_id="1"