sergeiss
Тогда так и сделаю!
ps не занаю откуда(
Наверно еще не выработалось расставлять кавычки только там где они нужны
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
|
К сожалению, такой вариант не подойдет.
В таблице могут дублироваться строки с одинаковыми service_id и work_id,
блок WHERE выбирет все правильно, а вот HEVING отсеет часть нужного, так как строк
может быть не две а 8 или 10.
Как еще можно поступить?
sergeiss
10.05.2015 - 14:23
Цитата (Reh @ 10.05.2015 - 14:06) |
К сожалению, такой вариант не подойдет. В таблице могут дублироваться строки с одинаковыми service_id и work_id, |
Ну так думать надо тогда. И кстати, использование LEFT JOIN тоже неправильное будет, скорее всего, при дублировании по этим критериям.
У них в чем еще разница, у этих данных?
PS. Хорошо. В выражении "having count(service_id) = 2" поставь не "равно", а "больше или равно".
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Цитата |
И кстати, использование LEFT JOIN тоже неправильное будет, скорее всего |
Непойму почему, мы же все дубли потом через GROUP BY уберем.
Цитата |
У них в чем еще разница, у этих данных? |
Есть еще один столбец, в нем и есть разница, но его данные в этом запросе не используются.
Цитата |
PS. Хорошо. В выражении "having count(service_id) = 2" поставь не "равно", а "больше или равно". |
Точно!!! Нам же надо убрать все что меньше!
Еще раз спасибо!
Цитата |
PS. Хорошо. В выражении "having count(service_id) = 2" поставь не "равно", а "больше или равно". |
Так тоже не выйдет(((
Например
where work_id in (3,6) по =3 мы выберем три строки, а по =6 ниодной.
блок HAVING это пропустит так как он проверит count(service_id) >=2.
sergeiss
10.05.2015 - 15:40
Reh, в таком случае надо задействовать третье поле, по которому можно различить эти разные состояния при одинаковых service_id и work_id. Что за поле, какие там значения?
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Цитата |
Что за поле, какие там значения? |
Первое поле service_id, второе work_id (малярные работы, и тд), третье поле work_detail_id (покраска, полировка и тд).
Нужно, например, выбрать все service_id которые занимаются малярными работами и ремонтом электрики одновременно(то-есть по столбику work_id).
sergeiss
10.05.2015 - 18:50
Reh, тогда формируй запрос также, как я в самом начале темы показал. С джойнами.
select s1.service_id
from services s1
left join services s2
left join services s3
...
on
s1.service_id = s2.service_id and
s1.service_id = s3.service_id and
...
where
s1.work_id=3 and
s2.work_id=6 and
s3.work_id=7 and
...
s1.work_id is not null and
s2.work_id is not null and
s3 work_id is not null
...
Вобщем-то, в ПХП будет очень просто сформировать такой запрос. implode() тебе в руки.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
AllesKlar
10.05.2015 - 18:53
Цитата (Reh @ 9.05.2015 - 18:51) |
AllesKlar
Цитата | Тебе именно пары значений нужны или только service_id? |
Мне нужны только service_id, приетом только те, которые имеют определенные work_id. work_id прописаны в массиве, их может быть 25 штук, а может и 1.
|
Не понимаю, что вы тут городите уже несколько дней.
Ему же не нужны пары, ему нужны только значения одного столбца.
Я еще 3 дня назад запрос написал:
SELECT service_id
FROM table
WHERE work_id = 3 OR work_id = 6 OR work_id = ... OR work_id = n
GROUP BY service_id
Или я что-то не понимаю в обсуждаемом? :blink:
_____________
[продано копирайтерам]
sergeiss
10.05.2015 - 19:06
Цитата (AllesKlar @ 10.05.2015 - 18:53) |
Или я что-то не понимаю в обсуждаемом? |
Не понимаешь
Ему надо выбрать не просто те service_id, где есть искомые значения. А те service_id, для которых в разных строках есть одновременно весь набор нужных данных. То есть, например, если указаны work_id = 3 или 6, то надо выбрать service_id 1 и 9 (из данных, показанных в примере в начале). 11 и 12 не годятся, т.к. у них есть только по одному work_id из искомых. По твоему же запросу они тоже будут выбраны.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
AllesKlar
10.05.2015 - 19:10
а... пардоньте.
_____________
[продано копирайтерам]
Цитата |
Или я что-то не понимаю в обсуждаемом? |
наверно.
Объясню еще. Имеем массив $work
array(3) {
[0]=>
string(1) "2"
[1]=>
string(1) "3"
[2]=>
string(2) "28"
}
Мне нужно выбрать только те service_id, которые имеют work_id = 2, work_id = 3, work_id = 28
Если в таблице нету work_id = 28, но есть work_id = 2, work_id = 3 то этот service_id нам не нужен. Мы ищем service_id, если только он присутствует в таблице со всеми work_id = 2, work_id = 3, work_id = 28
Цитата (sergeiss @ 10.05.2015 - 18:50) |
Reh, тогда формируй запрос также, как я в самом начале темы показал. С джойнами.
select s1.service_id
from services s1 left join services s2 left join services s3 ...
on s1.service_id = s2.service_id and s1.service_id = s3.service_id and ...
where s1.work_id=3 and s2.work_id=6 and s3.work_id=7 and ... s1.work_id is not null and s2.work_id is not null and s3 work_id is not null ... Вобщем-то, в ПХП будет очень просто сформировать такой запрос. implode() тебе в руки. |
Как work_I'd может одновременно иметь значение 3 и быть null? Не лишнее ли проверка is not null?
_____________
Трус не играет в хокей
Цитата |
Reh, тогда формируй запрос также, как я в самом начале темы показал. С джойнами. |
Так и поступлю!
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.