powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос
20 сообщений из 20, страница 1 из 1
Помогите составить запрос
    #39039133
olechka94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет! помогите мне плиз составить запросы.
есть база - событие и дата

дождь 27.08.2015
дождь 27.08.2015
снег 27.08.2015
дождь 28.08.2015
дождь 28.08.2015
гроза 28.08.2015

нужны запросы
1. список уникальных событий за 28.08 которых не было раньше, чем 28.08
2. список уникальных событий которые продолжаются два и более дня подряд.
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39039144
1
В зависимости от того, к чему относится слово "уникальный" в вопросе: к результату или к событию в этот день,having будет не нужен или нужен
Код: sql
1.
2.
3.
4.
5.
6.
select t1.событие
from table t1
where t1.дата='2015-08-28'
and not exists (select 1 from table t2 where t1.событие=t2.событие and t2.дата<'2015-08-28')
group by t1.событие
--having count(*)=1


2
Код: sql
1.
2.
3.
4.
select t1.событие
from table t1
where exists (select 1 from table t2 where t1.событие=t2.событие and t2.дата=t1.дата+1)
group by t1.событие
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39039281
olechka94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо заработало! правда медленно - запрос делается несколько минут, хотя база 200 МБ, 300000 строк.
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39039293
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
оля, делай индексы
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39042818
alikmakh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bochkov, а мне не поможете составить запрос?
В таблице две колонки (id_p и id_d)
Задача узнать id_p где id_d = 31 И 33 И 78.

пример таблицы:
----------------
id_p | id_d |
----------------
728 | 31
728 | 33
728 | 78
----------------
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39042834
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39042862
alikmakh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007,

ты сам то хоть это читал, судатрь7
Если читал, то читай ещё. Другим не советуй.
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39042887
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alikmakh,

Вы считаете, что ответ не в тему?
Или просто ждете готовое решение?
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39042896
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007,

А чем оно поможет, когда задача ставится неверно? Внимательно:

1. Колонка И колонка. То есть во второй колонке в КАЖДОЙ записи ровно ОДНО число.
2. Надо найти где (в колонке!) стоит И то И другое ... в одной записи, ибо "задача узнать", то бишь получить значение из первой колонки.

:)

Наверное было ИЛИ то ИЛИ иное... не?
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39042898
having count
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alikmakh,
авторВ таблице две колонки (id_p и id_d)
Задача узнать id_p где id_d = 31 И 33 И 78.
на 38мин.
YouTube Video
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39042900
having count
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
главное и потерял ...
having count
Код: sql
1.
2.
3.
4.
5.
select id_p
from Table
where id_d in (31 , 33 , 78)
group by id_p
having count(*)=3
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39042901
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Немног не точно. Там далее пояснение есть:having count
Код: sql
1.
2.
3.
4.
select id_p
from Table
where id_d in (31 , 33 , 78)
having count(DISTINCT id_d)=3
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39042906
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

Не, сформулирована как раз задача на деление. С остатком:)
Без остатка немного не так - найти все id_p, для которых в id_d есть ТОЛЬКО значения как 31, так И 33, И 78
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39042930
alikmakh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007,

Я пока нашел такое решение
LEFT JOIN таблицу с разными айди (tb1, тб2 и tb3)
вот примерно так:
select rd.id_p from r_d rd
left join r_d rd2 on (rd.id_p=rd2.id_p)
left join r_d rd3 on (rd.id_p=rd3.id_p)
where rd.id_d=31 and rd2.id_d=33 and rd3.id_d=78;
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39042932
alikmakh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007Arhat109,

Не, сформулирована как раз задача на деление. С остатком:)
Без остатка немного не так - найти все id_p, для которых в id_d есть ТОЛЬКО значения как 31, так И 33, И 78

Задача не найти все id_p (он всегда один) а узнать его.
В общем задача в реале такова:
В базе данных больных есть больные у которых сразу несколько болезней.
В таблице болезней есть айди больного и айди болезни.
Так вот, надо быстро найти такого больного у которого все три болезни одновременно а не или-или....
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39042940
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alikmakhCygapb-007,

Я пока нашел такое решение
LEFT JOIN таблицу с разными айди (tb1, тб2 и tb3)
вот примерно так:
Код: sql
1.
2.
3.
4.
select rd.id_p from r_d rd
left join r_d rd2 on (rd.id_p=rd2.id_p)
left join r_d rd3 on (rd.id_p=rd3.id_p)
where rd.id_d=31 and rd2.id_d=33 and rd3.id_d=78;

Тоже решение.
Но "хардкод"ное, хотя при наличии правильного индекса и достаточно оптимальное. Хотя и не совсем точное:
Код: sql
1.
2.
3.
4.
5.
select a.id_p 
from r_d a
join r_d b on b.id_p=a.id_p and b.id_d=33
join r_d c on c.id_p=a.id_p and b.id_d=78
where a.id_d=31;


Хуже рассмотренных тем, что при изменении делителя придется переписывать запрос
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39042948
alikmakh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007,

Ваш последний вариант не подходит, поскольку клоз WHERE формируется в PHP на основе поискового http запроса. Т.е. в запросе может быть одна болезнь указана или две или три и тд....
В зависимости от кол-ва болезней я подключаю LEFT JOIN в mysql запрос.
Это, конечно хардкорное, как Вы сказали, решение. Может есть что попроще?
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39042951
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alikmakhМожет есть что попроще?Так ведь предложено уже, типовое для деления...
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39042959
alikmakh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007,

Я создал в базе данных больного с пятью болезнями (чтобы был единственным).
Попробовал Вашим кодом - найден был не он, а первый попавшийся с id_болезнью = 30.
Попробовал своим - найден был мой больной (с пятью болезнями).

Так, что Ваше код не рабочий.
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39042976
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alikmakh,

Вы кино-то посмотрите все же.

А то, что при исправлении тоже не заметил пропущенную группировку - ну да, не сразу заметил. Повторно исправление писать не стал, понадеялся на... уж и не знаю, на что понадеялся... напрасно, звиняйте...
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]