Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1 2
Здравствуйте!
Сразу скажу, поиском пробовал пользоваться, но не смог грамотно сформулировать - что же найти.
Версия MySQL:
mysql Ver 14.14 Distrib 5.1.41, for debian-linux-gnu (i486) using readline 6.1
Имеется три(в общем случае) таблицы:
parameter:
Неактивен
Здравствуйте.
Если я правильно понял, то приведенный запрос
Отредактированно deadka (01.05.2011 17:25:26)
Неактивен
Нет, не в том дело. Оно ищет model_id по 1 или 5. А мне необходимо сразу по нескольким параметрам
Т.е. если выбрать несоответсвующий действительности запрос: IN (2,5) т.е. AMD и 478, в результат все равно выведется model_id=1, хотя оно соответствует только одному критерию запроса (5)
Неактивен
Эхм... Посмотрите вот этот топик.
Неактивен
Ах вон оно что... Т.е. мы вибираем только то, что имеет количество соответсвий 2
Я так понимаю, что GROUP BY 1 эквивалентно GROUP BY model_id и 1 - это порядковый номер выбираемого поля?
Получается, если параметров больше двух (допустим, у нас забиты еще и Частота процессора, техпроцесс), а выбираем только по двум, то вместо HAVING c=2 ставим HAVING c>=2. Верно?
Отредактированно BeHappy (01.05.2011 18:29:34)
Неактивен
BeHappy написал:
Я так понимаю, что GROUP BY 1 эквивалентно GROUP BY model_id и 1 - это порядковый номер выбираемого поля?
Да, group by 1 - это значит сгруппировать по первому полю в выборке.
BeHappy написал:
Получается, если параметров больше двух (допустим, у нас забиты еще и Частота процессора, техпроцесс), то вместо HAVING c=2 ставим HAVING c>=2. Верно?
Как бы да, только с условием IN (1,5) тоже нужно соотносить .
Неактивен
deadka написал:
Как бы да, только с условием IN (1,5) тоже нужно соотносить
Хм.
Т.е. в клиентской программе вводим переменную, которая держит в себе количество выбранных параметров, и в запросе будет HAVING c=переменная.
Вот такое соотношение будет верным, как мне представляется.
Большое спасибо!
Еще вопрос: а можно ли не включать COUNT(*) в результат выборки?
Т.е.
BeHappy написал:
а выбираем только по двум, то вместо HAVING c=2 ставим HAVING c>=2. Верно?
Вот тут напутал (а еще редактированием вас запутал, похоже)
Попробовал повыполнять запросы, дошло.
Тут нужно строгое =, без >=
Отредактированно BeHappy (01.05.2011 18:46:03)
Неактивен
BeHappy написал:
Т.е. в клиентской программе вводим переменную, которая держит в себе количество выбранных параметров, и в запросе будет HAVING c=переменная.
Вот такое соотношение будет верным, как мне представляется.
Ну, в зависимости от бизнес-логики Вашего приложения, наверное да .
BeHappy написал:
Еще вопрос: а можно ли не включать COUNT(*) в результат выборки?
Т.е.SELECT model_id FROM modelparameter WHERE parameter_value_id IN (1,5) GROUP BY 1 HAVING COUNT(*)=2;
Да, можно.
Неактивен
И нормализуйте, пожалуйста, последнюю табличку. Не имеет смысла
держать поле modelparameter(parameter_id), т.к. оно следует из
parameter_value_id.
Неактивен
paulus написал:
И нормализуйте, пожалуйста, последнюю табличку
Да это уже давно понял, спасибо. Эта БД вообще тестовая, я ее периодически видоизменяю, потом уже как со всем определюсь - сделаю всё как надо (ну или как смогу, но лучше, чем сейчас)
Неактивен
Здравствуйте, извините за некропост, в поиске нашел эту тему.
У меня проблема немного схожая.
Имеется две таблицы, пускай они будут называться cat_product и cat
Они имеют вид
cat_product
+----+--------------+------------+
| id | product_id | cat_id |
+----+--------------+------------+
| 1 | 1 | 1 |
| 2 | 1 | 17 |
| 5 | 2 | 17 |
| 7 | 2 | 1 |
+----+--------------+------------+
и
cat
| cat_id | name |
+----+----------------+
| 1 | Лыжи |
| 17 | Fisher |
| 19 | Лыжник |
+----+----------------+
Мне нужно селектом вытащить product id, cat_id, которых соответствует строго значениям 'Лыжи' и 'Fischer' (эти значения находятся в переменных).
Для примера, если одна переменная содержит "Лыжи", а другая "Fisher" то выбираются значения product_id 1 и 2, а если вторая переменная содержит значение "Лыжник", то не выбирается ничего.
Добился я пока того, что происходит вывод product_id по 2 раза, с разными значениями cat_id (его я вывожу дабы понять, нашел он 2 одинаковых значения или нет)
Вопрос такой - как реализовать сравнение и выборку product_id по двум значениям name.
Надеюсь, все смог понять объяснить Заранее спасибо за любую помощь.
Неактивен
Неактивен
Теме не так много времени, поэтому решил продолжить вопросы по таблице, представленной топикстартером
Возьмем для примера всё ту же таблицу (вначале темы) modelparameter
Запрос
Отредактированно follow (17.07.2013 06:11:44)
Неактивен
Это разные запросы.
Неактивен
vasya написал:
Это разные запросы.
SELECT model_id FROM modelparameter WHERE parameter_value_id IN (3,5) GROUP BY 1 HAVING COUNT(*)=2вернет model_id, которым соответствуют parameter_value_id равные 3 И 5SELECT model_id FROM modelparameter WHERE parameter_value_id IN (3,5) GROUP BY 1вернет model_id, которым соответствуют parameter_value_id равные 3 ИЛИ 5
Да, ошибся...
Но как сделать 3 И 5 чтобы mysql вернула (1 и 2) для нашей задачи?
Отредактированно follow (17.07.2013 09:26:20)
Неактивен
follow написал:
Но как сделать 3 И 5 чтобы mysql вернула (1 и 2) для нашей задачи?
Этот вопрос взрывает мне мозг.
Условие на 3 И 5 для тестовых данных вернет пустой результат.
Почему должен быть возвращен ответ (1 и 2) ??
Неактивен
vasya написал:
follow написал:
Почему должен быть возвращен ответ (1 и 2) ??
...подождите, не взрывайтесь
...может я что-то не пониаю
Нам из таблицы нужно выбрать model_id у которых value = 3 AND value = 5
что тут странного? как?
Неактивен
У model_id =1 есть только value = 5
У model_id =2 есть только value = 3
А вы используете запрос, который выбирает только те model_id каждому из которых одновременно соответствуют value равные 3 И 5.
Неактивен
vasya написал:
У model_id =1 есть только value = 5
У model_id =2 есть только value = 3
А вы используете запрос, который выбирает только те model_id каждому из которых одновременно соответствуют value равные 3 И 5.
да, понял, оказывается у меня немного другая структура значений
не будем вдаваться в то, как получился такой массив данных...
допустим у меня так:
modelparameter
Неактивен
Неактивен
Помогите пожалуйста встроить эту выборку в мою
Та структура данных (пример выше) получилась из такого запроса:
Неактивен
Вместо modelparameter
подставте
(SELECT * from _lots l join _lot_param_values ppv using (lot_id) join _param_values pv using (value_id) WHERE category = '2' AND ppv.param_id=4) t1
Неактивен
Сделал так:
Неактивен
Вместо DISTINCT l.lot_id,ppv.value_id FROM
DISTINCT lot_id, value_id FROM
Вместо WHERE ppv.value_id IN
WHERE value_id IN
Неактивен
vasya написал:
Вместо WHERE ppv.value_id IN
WHERE value_id IN
Неактивен
Страниц: 1 2