#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 }