Всем привет! Помогите пожалуйста состваить запрос чтобы выбрать все service_id для которых
work_id = 3 && 6
"SELECT `service_id` FROM `table` WHERE `work_id` = '3' && `work_id` = '6'"
Оно?
_____________
Принимаю заказы, писать в ЛС
AllesKlar
9.05.2015 - 13:18
Медведь Думай еще.
Внимательно прочитай условие.
_____________
[продано копирайтерам]
sergeiss
9.05.2015 - 13:35
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, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
sergeiss, огромное спасибо!
То что надо!
Цитата (AllesKlar @ 9.05.2015 - 13:18) |
Медведь Думай еще. Внимательно прочитай условие. |
Подзапрос - понятно))
_____________
Принимаю заказы, писать в ЛС
Цитата (sergeiss @ 9.05.2015 - 13:35) |
Медведь, мне вот интересно. Ты сможешь объяснить логику "твоего" запроса? |
Работаем с таблицей `table`, достаём значение из колонки `service_id`, если `work_id` = '3' && `work_id` = '6'
По моему должно работать, если нет объясните (если бы это был не подзапрос) и надо and конечно
Прочитал подробнее, каюсь)
_____________
Принимаю заказы, писать в ЛС
AllesKlar
9.05.2015 - 14:08
Медведь`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
_____________
Принимаю заказы, писать в ЛС
А если мне надо выбрать все service_id по 20 work_id, я должен 20 раз таблицу саму с собой соединить? Или как то упростить можно?
AllesKlar
9.05.2015 - 15:06
Медведьor OR
OR Не может значение быть равно 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
9.05.2015 - 15:19
Цитата (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, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Гость_Медведь
9.05.2015 - 15:26
Цитата (AllesKlar @ 9.05.2015 - 15:06) |
Медведь or OR OR Тоже Не может значение быть равно 3 и в тоже самое время равно 6 |
Ладно этот экзамен я провалил.)
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;
$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
9.05.2015 - 22:23
Цитата (Reh @ 9.05.2015 - 20:51) |
Если я сделаю так, нормально будет? |
А что же ненормального-то? Ты формируешь запрос в ПХП, указываешь нужные данные.
PS. А почему ты '$count_work' написал в кавычках? Откуда, интересно, такая (дурная) привычка у многих программеров?
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.