PHP MySQL один ко многим

W
На сайте с 17.12.2012
Offline
31
554

У меня такая проблема есть 3 таблицы.

1 информация о категории. 2я - группы фильтров. 3 фильтры.

2я таблица связана с 1-й таблицей по полю category_id

также в ней хранится информация о входящих в эту группу фильтрах в поле filters_ids, где фильтры перечисляются через запятую. Мне нужно получить все фильтры для данной категории. Пишу следующее

SELECT f.*, fg.filters_ids  FROM filters_groups AS fg,filters as f  WHERE f.id IN (fg.filters_ids) AND fg.category_id='".$category_id."' 

Но возвращается инфо только об одном фильтре в списке. Если делать два запроса вот так, то все ок

SELECT * FROM filters_groups AS fg WHERE fg.category_id='".$category_id."'

SELECT * FROM filters WHERE id IN(".$p['filters']['filters_ids'].")

В чем ошибка? или php не поддерживает подобных запросов?

twinlv
На сайте с 11.12.2013
Offline
65
#1

Попробуй сделать принт самого запроса, чтоб показал полный запрос со всеми переменными, после этого всунь в phpmyadmin и посмотри что выводится ...

Может нету строчек... попробуй вместо запятой LEFT JOIN и он тебе должен показать или NULL или что-то

CloudHosting.lv - полный комплекс услуг на базе собственного ДЦ (г. Рига, Латвия) https://www.cloudhosting.lv (https://www.cloudhosting.lv)
DavyJohnes
На сайте с 05.01.2011
Offline
84
#2
wersiazz:
У меня такая проблема есть 3 таблицы.
1 информация о категории. 2я - группы фильтров. 3 фильтры.
2я таблица связана с 1-й таблицей по полю category_id
также в ней хранится информация о входящих в эту группу фильтрах в поле filters_ids, где фильтры перечисляются через запятую. Мне нужно получить все фильтры для данной категории. Пишу следующее
SELECT f.*, fg.filters_ids  FROM filters_groups AS fg,filters as f  WHERE f.id IN (fg.filters_ids) AND fg.category_id='".$category_id."' 

Но возвращается инфо только об одном фильтре в списке. Если делать два запроса вот так, то все ок
SELECT * FROM filters_groups AS fg WHERE fg.category_id='".$category_id."'
SELECT * FROM filters WHERE id IN(".$p['filters']['filters_ids'].")

В чем ошибка? или php не поддерживает подобных запросов?


SELECT
fg.filters_ids,
f.*
FROM
filter_groups fg
LEFT JOIN filters AS f ON f.id IN (fg.filters_ids)
WHERE
fg.category_id=".$category_id."

Как-то так. Однако, если Вам интересно, мне не нравится структура Вашей базы. Я бы убрал поле filter_ids из таблицы filter_groups и добавил бы поле id_group в таблице filters. О том как это связать, надеюсь, догадываетесь.

И еще, для понимания: сам по себе php не имеет поддержку тех или иных запросов. Есть адаптер, который связывается с бд, передает ей запрос и возвращает в программу данные, полученный от базы или ошибку в случае неудачи. Проще говоря: php понятия не имеет о "правильных" и "не правильных" запросах.

https://handy-tools.io (https://handy-tools.io) - Набор полезных утилит для всех!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий