[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите составить подзапрос
Страницы: 1, 2, 3
Reh
Всем привет! Помогите пожалуйста состваить запрос чтобы выбрать все service_id для которых
work_id = 3 && 6

user posted image
Миша
"SELECT `service_id` FROM `table` WHERE `work_id` = '3' && `work_id` = '6'"


Оно?

_____________
Принимаю заказы, писать в ЛС
AllesKlar
Медведь
biggrin.gif
Думай еще.
Внимательно прочитай условие.



_____________
[продано копирайтерам]
sergeiss
Reh, держи :)

select s1.service_id, s1.work_id, s2.work_id

from services s1
left join services s2

on s1.service_id = s2.service_id

where
s1.work_id=3 and
s2.work_id=6 and
s1.work_id is not null and
s2.work_id is not null


Медведь, мне вот интересно. Ты сможешь объяснить логику "твоего" запроса? ;)


_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Reh
sergeiss, огромное спасибо!
То что надо!
Миша
Цитата (AllesKlar @ 9.05.2015 - 13:18)
Медведь
biggrin.gif
Думай еще.
Внимательно прочитай условие.

Подзапрос - понятно))

_____________
Принимаю заказы, писать в ЛС
Миша
Цитата (sergeiss @ 9.05.2015 - 13:35)
Медведь, мне вот интересно. Ты сможешь объяснить логику "твоего" запроса? wink.gif

Работаем с таблицей `table`, достаём значение из колонки `service_id`, если `work_id` = '3' && `work_id` = '6'

По моему должно работать, если нет объясните (если бы это был не подзапрос) и надо and конечно

Прочитал подробнее, каюсь)

_____________
Принимаю заказы, писать в ЛС
AllesKlar
Медведь
`work_id` = '3' && `work_id` = '6'

Не может быть зеленое одновременно красным.

_____________
[продано копирайтерам]
Миша
Цитата (AllesKlar @ 9.05.2015 - 14:08)
Медведь
`work_id` = '3' && `work_id` = '6'

Не может быть зеленое одновременно красным.

`work_id` = 3 and `work_id` = 6


_____________
Принимаю заказы, писать в ЛС
Reh
А если мне надо выбрать все service_id по 20 work_id, я должен 20 раз таблицу саму с собой соединить? Или как то упростить можно?
AllesKlar
Медведь
or OR OR user posted image
Не может значение быть равно 3 и в тоже самое время равно 6

Reh
Цитата
А если мне надо выбрать все service_id по 20 work_id, я должен 20 раз таблицу саму с собой соединить? Или как то упростить можно?

Тебе именно пары значений нужны или только service_id?
Если пары значений, то в php формируешь в цикле запрос, серверу все равно сколько раз ты объединишь таблицу саму с собой.

Если нужны только значения только service_id, то запрос намного проще
Цитата
SELECT service_id
FROM table 
WHERE  work_id = 3 OR  work_id = 6
GROUP BY service_id

где work_id = 3 OR work_id = 6 ... так же формируешь в php циклом

_____________
[продано копирайтерам]
sergeiss
Цитата (Reh @ 9.05.2015 - 14:33)
А если мне надо выбрать все service_id по 20 work_id... как то упростить можно?


Можно и упростить :) Это ж просто, "как дважды два":

select service_id, group_concat( work_id )
from services
where work_id in (3,6)
group by service_id
having count(service_id) = 2

Здесь только надо менять список, вместо (3,6) указывай нужные тебе данные, да в having в количестве указывай не 2, а то количество, что у тебя в списке.

PS. group_concat я тут использовал с единственной целью, чтобы убедиться, что выбраны нужные данные. В реальном запросе это не обязательно писать.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Гость_Медведь
Цитата (AllesKlar @ 9.05.2015 - 15:06)
Медведь
or OR OR Тоже user posted image
Не может значение быть равно 3 и в тоже самое время равно 6

Ладно этот экзамен я провалил.)
Reh
AllesKlar
Цитата
Тебе именно пары значений нужны или только service_id?


Мне нужны только service_id, приетом только те, которые имеют определенные work_id.
work_id прописаны в массиве, их может быть 25 штук, а может и 1.

sergeiss
Цитата
Можно и упростить :) Это ж просто, "как дважды два":

select service_id, group_concat( work_id )
from services
where work_id in (3,6)
group by service_id
having count(service_id) = 2


такой вариант я ночью рассматривал, но меня смутило что в запрос будет передаваться еще одна переменная. Если я сделаю так, нормально будет?


$work;//массив с work_id
$count_work = count($work);
$work = implode(",", $work);




select service_id
from services
where work_id in ('$work')
group by service_id
having count(service_id) = '$count_work'
sergeiss
Цитата (Reh @ 9.05.2015 - 20:51)
Если я сделаю так, нормально будет?

А что же ненормального-то? Ты формируешь запрос в ПХП, указываешь нужные данные.

PS. А почему ты '$count_work' написал в кавычках? Откуда, интересно, такая (дурная) привычка у многих программеров?

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Быстрый ответ:

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