SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 23.12.2022 19:28:44

ComeOn
Участник
Зарегистрирован: 23.12.2022
Сообщений: 3

Условие для условия в запросе

Всем доброго!
Запрос работает в связке с PHP, но в данном случае, логику надо реализовать именно в MySQL. Логика такая - если есть значение, то условие выбора должно быть одним, а если нет значения, то другим.
Пытаюсь запрос в меру своих куцых знаний сделать, получается так:


SELECT a1.title AS TEXT, a1.id AS VALUE, @cookie:=30
FROM uahj8_content a1
JOIN uahj8_cck_core a2 ON a1.id=a2.pk
JOIN uahj8_cck_store_form_client a3 ON a3.id=a2.pk
JOIN uahj8_cck_store_item_content a4 ON a4.id=a2.pk
WHERE a2.cck='client' AND a1.state=1 AND a4.id IN
(if (@cookie='',
(
SELECT id
FROM uahj8_cck_store_item_content
),
(
SELECT id
FROM uahj8_cck_store_item_content
WHERE
 (a4.common_select_organization LIKE '%,@cookie' OR a4.common_select_organization LIKE '@cookie,%' OR a4.common_select_organization LIKE '%,@cookie,%' OR a4.common_select_organization= '@cookie')
)
))


Запрос большой, но реализация заключается в воде переменной, в которую я буду значение из пыха подставлять, если значение будет отличным от пустой строки, то в выборку должно подставиться условие с лайками, а если значения нет, то переменная будет пустой и тогда мне вообще условия не надо, но, я так не придумал, а придумал чтоб условие выбирало из всех id.
Ответ на этот запрос
Ошибка SQL (1242): Subquery returns more than 1 row
, хотя я использую IN. Помогите, кто чем может справиться. Спасибо.

Отредактированно ComeOn (23.12.2022 19:29:24)

Неактивен

 

#2 23.12.2022 22:36:48

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2396

Re: Условие для условия в запросе

В условие IN можно передавать массив значений.
Другими словами говоря можно
select * from t where ref_id IN (select id from ref WHERE тра-та-та), но нельзя
select * from t where ref_id IN (select id, another_field from ref WHERE тра-та-та)


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 24.12.2022 00:13:14

ComeOn
Участник
Зарегистрирован: 23.12.2022
Сообщений: 3

Re: Условие для условия в запросе

Так у меня в подзапросах и запрашивается только id. Причем, если после IN поставить каждый из этих запросов - работает. Дело в неправильном условии, я так понимаю.

Неактивен

 

#4 24.12.2022 08:35:53

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5791

Re: Условие для условия в запросе

У вас подзапрос внутри функции. if() может вернуть значение, а не массив.
Нужно

WHERE a2.cck='client' AND a1.state=1 AND
((a4.id IN (подзапрос1) and @cookie='')
or
(a4.id IN (подзапрос2) and @cookie<>''))

Неактивен

 

#5 24.12.2022 11:38:12

ComeOn
Участник
Зарегистрирован: 23.12.2022
Сообщений: 3

Re: Условие для условия в запросе

vasya написал:

У вас подзапрос внутри функции. if() может вернуть значение, а не массив.
Нужно

WHERE a2.cck='client' AND a1.state=1 AND
((a4.id IN (подзапрос1) and @cookie='')
or
(a4.id IN (подзапрос2) and @cookie<>''))

Спасибо, так заработало. Только переменную надо до запроса SET делать. Ура, спасибо.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson