выберите несколько столбцов из другой таблицы, где поле содержит массив

#php #mysql #arrays

#php #mysql #массивы

Вопрос:

У меня есть две таблицы

 phi_ads {id,files}
phi_files {id,file}
  

Проблема в том, что phi_ads содержит массив, например (20,21), эти числа являются идентификатором для phi_files

Итак, мне нужно выбрать все эти файлы

Я пытаюсь это

 select a.name,d.*,f.* from phi_ads d 
inner join phi_areas a on a.id = d.area 
inner join phi_files f on f.id = d.files 
where d.id=42
  

для примечания phi_ads.files = "102,103" таким образом, возвращайте только первый файл, но мне нужно вернуть весь файл в phi_files

Я новичок.

Ответ №1:

Используйте оператор IN , оператор IN позволяет указать несколько значений в предложении WHERE.

   phi_ads.files In (102,103)
  

Ссылка

Обновить

    select a.name,d.*,f.* from phi_ads d 
   inner join phi_areas a on a.id = d.area 
   inner join phi_files f on FIND_IN_SET( f.id , d.files )
   where d.id=42
  

Обновление 2

    select a.name,d.*,GROUP_CONCAT(f.name) as name from phi_ads d 
   inner join phi_areas a on a.id = d.area 
   inner join phi_files f on FIND_IN_SET( f.id , d.files )
   where d.id=42
  

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

1. номер файлов меняется, поэтому я должен сначала получить номер!!

2. Да, вы можете получить это, используя запрос внутри В operator, или также используя отдельный запрос.

3. я сделал это, выберите a.name ,д.*,е.* из phi_ads d внутреннего объединения phi_areas a в a.id = d.area внутреннее объединение phi_files f на f.id = d.files где d.id=42 и f.id в (d.files)

4. Можете ли вы предоставить образцы данных в своих таблицах?

5. phi_ads { id=1 files =20,21,22 } phi_files { id=20 file=testname1 } { id=21 file=testname2 } { id=22 file=testname3 }