MySQL ВЫБЕРИТЕ две таблицы и многострочную справку

#php #mysql

#php #mysql

Вопрос:

 table event
id   idArtist    City       Img
__________________________________
1      51        Lonon     01.jpg
.. . .. .. .etc


table artist
id   Name    Img01    Img02    Img03   Img_Txt01   Img_Txt02  Img_Txt03  
_________________________________________________________________________
51   Bob    54.jpg    01.jpg   NULL     text 01     Text 02
  

Мне нужно отобразить ВСЕ изображения из таблицы событий и отобразить их текст, хранящийся в таблице Artist (вы видите Img == Img02, тогда мне нужен Img_Txt02)

Как я могу сделать?? Много thxxxxx

Комментарии:

1. Что происходит, когда у исполнителя есть 4 изображения? Вам следует посмотреть на нормализацию ваших таблиц и детали разделения изображений в отдельной таблице.

Ответ №1:

 SELECT event.Img,artist.Img_Txt02 
  FROM event LEFT JOIN artist 
    ON event.idArtist=artist.id
  

Предполагая, что я правильно понял ваш вопрос.

Комментарии:

1. Это сработало бы только в том случае, если художник сделал только один снимок. Если у художника две картинки, вы получите 4 записи вместо двух.

2. ДЕЛО В ТОМ, ЧТО Img также может быть 54.jpg … Я могу выбрать это из области администрирования

Ответ №2:

Повторить на основе уточнения OP

Поскольку вы не знаете, на какие поля мы будем ссылаться в таблице artist (img01, img02, img03), я бы предложил создать представление, которое улучшает макет таблицы artist, чтобы мы могли ссылаться на нее. Вот код, который я бы использовал:

 SELECT id, Name, Img01 AS Img, Img_Txt01 AS Img_Txt
FROM artist
UNION ALL
SELECT id, Name, Img02, Img_Txt02
FROM artist
UNION ALL
SELECT id, Name, Img03, Img_Txt03
FROM artist
  

Это даст вам список, на который вы можете ссылаться. Это также позволило бы вам довольно просто расширить вашу таблицу исполнителей (добавить Img4, Img5 и т.д.) Вы также могли бы использовать это приведенное выше утверждение непосредственно в вашем окончательном запросе следующим образом:

 SELECT event.*, images.Img_Txt
FROM event
INNER JOIN 
    (SELECT id, Name, Img01 AS Img, Img_Txt01 AS Img_Txt
    FROM artist
    UNION ALL
    SELECT id, Name, Img02, Img_Txt02
    FROM artist
    UNION ALL
    SELECT id, Name, Img03, Img_Txt03
    FROM artist) AS images
ON event.idArtist = images.id AND event.Img = images.Img_Txt
  

Комментарии:

1. ДЕЛО В ТОМ, ЧТО Img также может быть 54.jpg … Я этого не знаю, поэтому = artist.Img02 неверно!

2. @Ste — ваш первоначальный пост был не очень ясным, поэтому все вас неправильно поняли. Однако, основываясь на новой информации, я скорректировал свой пост в соответствии с вашими потребностями.