Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос / 20 сообщений из 20, страница 1 из 1
29.08.2015, 14:40:56
    #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
29.08.2015, 15:10:27
    #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
30.08.2015, 10:44:18
    #39039281
olechka94
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос
спасибо заработало! правда медленно - запрос делается несколько минут, хотя база 200 МБ, 300000 строк.
...
Рейтинг: 0 / 0
30.08.2015, 12:21:47
    #39039293
bochkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос
оля, делай индексы
...
Рейтинг: 0 / 0
03.09.2015, 20:33:54
    #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
03.09.2015, 21:10:24
    #39042834
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос
...
Рейтинг: 0 / 0
03.09.2015, 21:52:15
    #39042862
alikmakh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос
Cygapb-007,

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

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

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

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

:)

Наверное было ИЛИ то ИЛИ иное... не?
...
Рейтинг: 0 / 0
03.09.2015, 22:48:26
    #39042898
having count
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос
alikmakh,
авторВ таблице две колонки (id_p и id_d)
Задача узнать id_p где id_d = 31 И 33 И 78.
на 38мин.
YouTube Video
...
Рейтинг: 0 / 0
03.09.2015, 22:50:07
    #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
03.09.2015, 22:53:56
    #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
03.09.2015, 23:02:47
    #39042906
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос
Arhat109,

Не, сформулирована как раз задача на деление. С остатком:)
Без остатка немного не так - найти все id_p, для которых в id_d есть ТОЛЬКО значения как 31, так И 33, И 78
...
Рейтинг: 0 / 0
03.09.2015, 23:38:37
    #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
03.09.2015, 23:43:42
    #39042932
alikmakh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос
Cygapb-007Arhat109,

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

Задача не найти все id_p (он всегда один) а узнать его.
В общем задача в реале такова:
В базе данных больных есть больные у которых сразу несколько болезней.
В таблице болезней есть айди больного и айди болезни.
Так вот, надо быстро найти такого больного у которого все три болезни одновременно а не или-или....
...
Рейтинг: 0 / 0
03.09.2015, 23:55:24
    #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
04.09.2015, 00:06:58
    #39042948
alikmakh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос
Cygapb-007,

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

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

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

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

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


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