[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: php массивы и mysql
Страницы: 1, 2, 3
linker
Valick
Наверное ты хотел сказать
SELECT *, (SELECT COUNT(p1.param_id) FROM p p1 WHERE p1.product_id = p.product_id) as c FROM p GROUP BY product_id HAVING c = 2


_____________
Gear Framework
Gear Framework на Github
Valick
Цитата
Every derived table must have its own alias

ну раз просит, дай ей алиас :)

SELECT t.* FROM (SELECT * FROM products WHERE param_id=3 OR param_id=7) t GROUP BY t.product_id HAVING COUNT(t.product_id)>1


_____________
Стимулятор ~yoomoney - 41001303250491
Valick
Цитата
Наверное ты хотел сказать

не, так не хотел сказать, но если работает, то пусть и так сойдет smile.gif


_____________
Стимулятор ~yoomoney - 41001303250491
linker
А может такое быть, что param1 и param2 будут не только у 123, но и например у 345?

_____________
Gear Framework
Gear Framework на Github
braindbrigada
Цитата
по идее должно работать


Если бы работало то выбрало один product_id максимально соответствующий параметрам? А если их несколько? тоесть помимо 123 соответствующего сем параметрам есть еще 456 и 789

Цитата
А может такое быть, что param1 и param2 будут не только у 123, но и например у 345?


вот только написал про это ))
Valick
braindbrigada, и что не выбирает? по идее долно выбрать продукты с максимальным количеством параметров, кто сказал, что он должен быть один?

_____________
Стимулятор ~yoomoney - 41001303250491
linker
Да, раз количество параметров известно, то пока можно ограничиться
mysql_query('SELECT id, product_id, (SELECT COUNT(t.param_id) FROM tabel t WHERE t.product_id = table.product_id) as count_params FROM table ' .
'WHERE param_id IN (param1, param2) ' .
'GROUP BY product_id ' .
'HAVING count_params = ' . $count_params);


_____________
Gear Framework
Gear Framework на Github
braindbrigada
Выбирает, но если есть param1, param2, param3, param4 то выбирает product_id в которых есть соответствие более одного параметра. тоесть если соответствует param2 и 3 или 1 и 3 и 4 и тд
Valick
braindbrigada, это ты про какой запрос сейчас говоришь?
HAVING COUNT(t.product_id)>1

но если у тебя 5 параметров неужели трудно догадаться что должно быть
HAVING COUNT(t.product_id)>4


_____________
Стимулятор ~yoomoney - 41001303250491
linker
Я поправил запрос.

_____________
Gear Framework
Gear Framework на Github
braindbrigada
потер пока
linker
У тебя в запросе в самом конце после count_params = 5 затесалась скобка )

_____________
Gear Framework
Gear Framework на Github
linker
SELECT 
id,
product_id,
(

SELECT
COUNT(t.param_id)
FROM
products t
WHERE
t.product_id = products.product_id
) as count_params
FROM
products
WHERE
param_id IN (13, 3, 5, 7, 1)
GROUP BY
product_id
HAVING
count_params=5


_____________
Gear Framework
Gear Framework на Github
Valick
в любом случае лучше использовать MAX()

_____________
Стимулятор ~yoomoney - 41001303250491
braindbrigada
linker, запрос сработал как я просил. Спасибо, но выбирает только те в которых есть только эти параметры, а если есть те параметры, что выбирали и еще параметры тоесть их больше то не выбирает.

'HAVING count_params >= ' . $count_params);


Нужно так?

Так не правильно выбирает... :o

Вот это работает!!!)))

SELECT t.* FROM (SELECT * FROM products WHERE param_id=param1 OR param_id=param2) t GROUP BY t.product_id HAVING COUNT(t.product_id)>=".$count_params


Всем огромное спасибо за помощь.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.