Задавайте вопросы, мы ответим
Вы не зашли.
Запрос, который должен был на главной странице выводить фирмы и их подтипы, у которых в базе ИМЕЮТСЯ фирмы.
Иерархия:
Тип фирмы->Подтип фирмы (кол-во фирм)
Выглядеть это будет так:
АВТОСАЛОНЫ:
- Продажа авто (2),
- Автовыкуп (1)
- Trade-in (1)
АВТОСЕРВИСЫ
- Шиномонтаж (1)
АВТОУСЛУГИ
- Такси (1)
ДРУГОЕ
- Автокредит (1)
- Автострахование (1)
Проблем бы небыло. За исключением одного: у фирмы - несколько подтипов.
Таблица FIRMS выглядет так:
firm_id 1
firm_type 3
firm_subtypes 1,4,5,8,9
firm_city 'Рязань'
........
Если бы firm_subtypes имел лишь одно значение - то всё бы работало следующим запросом:
SELECT COUNT(*) AS a1, t1.firm_type, t2.ftype_name, t2.ftype_alias, t2.ftype_picture, t3.fsubtype_name, t3.fsubtype_alias FROM ab_firms AS t1, ab_ftypes AS t2, ab_fsubtypes AS t3 WHERE t1.firm_type=t2.ftype_id AND t1.firm_subtypes=t3.fsubtype_id AND t1.firm_checked='on' GROUP BY t1.firm_subtypes, t1.firm_type ORDER BY t2.ftype_name, t3.fsubtype_name
Но firm_subtypes имеет значение '1,2,3,4,7,12,111'...
В этом и засада - приходится делать ...WHERE t3.fsubtype_id IN(t1.firm_subtypes)... - и выводится неверный результат. Надо разобраться. Дамп 3-х таблиц (Фирмы, Типы фирм, Подтипы фирм) - во вложении. Он уже заполнен. А вот и сам мой запрос (некорректный):
SELECT COUNT(*) AS a1, t1.firm_type, t2.ftype_name, t2.ftype_alias, t2.ftype_picture, t3.fsubtype_name, t3.fsubtype_alias FROM ab_firms AS t1, ab_ftypes AS t2, ab_fsubtypes AS t3 WHERE t1.firm_type=t2.ftype_id AND t3.fsubtype_id IN(t1.firm_subtypes) AND t1.firm_checked='on' GROUP BY t3.fsubtype_id, t1.firm_type ORDER BY t2.ftype_name, t3.fsubtype_name
В результате чего, у 1-го автосалона, который относится и к Продаже, и к Автовыкупу, и к Trade-in, должно выводиться как:
АВТОСАЛОНЫ:
- Продажа авто (2),
- Автовыкуп (1)
- Trade-in (1)
выводится лишь 1-й подтип:
АВТОСАЛОНЫ:
- Продажа авто (2)
Жду ответа! Буду благодарен за любую помощь! Дамп с 3 таблицами во вложении!
Неактивен
mikki11 написал:
В этом и засада - приходится делать ...WHERE t3.fsubtype_id IN(t1.firm_subtypes)... - и выводится неверный результат. Надо разобраться.
Сравните результат:
mikki11 написал:
Но firm_subtypes имеет значение '1,2,3,4,7,12,111'...
Сделайте отдельную табличку соответствия фирм/подфирм.
Неактивен
vasya написал:
У вас не удачно спроектирована база
Сделайте отдельную табличку соответствия фирм/подфирм.
Я знаю, но это будет перебор.... Если 1000 фирм, и для каждой фирмы - 5 подтипов, то для 1 такой фирмы придётся 5 записей вставлять в эту отдельную табличку:
FirmID SubTupeID
1 2
1 5
1 9
1 11
1 12
Неактивен
vasya написал:
Сравните результат:
select * from ab_firms t1 join ab_fsubtypes t3
on t3.fsubtype_id IN(t1.firm_subtypes);
иselect * from ab_firms t1 join ab_fsubtypes t3и найдите 10 отличий
on t3.fsubtype_id =t1.firm_subtypes;
Разные! В 1-м случае - любой из множества (или 1, или 2, или 3), а во 2-м случае - конкретная строка '1,2,3', то есть фирма, относящаяся ко всем 3 подтипам, а не к любому из заданных.
Неактивен