|
|
|
Запрос с условиями
|
|||
|---|---|---|---|
|
#18+
Есть две таблицы: 1 - messages, в которой содержится информация про сообщения и msg_queue содержит записи - для каждого пользователя отдельная запись. То есть, например пользователь с ID 10 отправил сообщение пользователю 20. В messages добавляется одна строка с данными об этом сообщении, а в таблицу msg_queue - для каждого пользователя инфа, прочитал ли он сообщение (read) и когда прочитал (date_read). Соответственно в msg_queue будет две записи - для пользователя 10 read = true, а для 20 - read = false. Запрос, который возвратит все записи: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Часть из результата: Код: css 1. 2. 3. 4. 5. Реально ли написать такой запрос, чтобы группируя записи по msg_id он сначала возвращал записи, которые read=false, но если таких нету, то возвращал самую раннюю date_read, при этом отсеяв дубликаты по msg_id? Не прошу за меня написать запрос - форум ведь не для этого, но подскажите, реально ли обойтись просто запросом и в каком направлении искать ответ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2015, 20:37 |
|
||
|
Запрос с условиями
|
|||
|---|---|---|---|
|
#18+
ursido , про DISTINCT знаю, но как связать его с моей задачей - не представляю. Да и одного DISTINCT, как я понимаю, маловато будет. Меня вообще терзают смутные сомнения, что это одним простым запросом реально сделать. Чтобы не терять время хотел бы узнать у знающих людей, реально это сделать или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2015, 21:10 |
|
||
|
Запрос с условиями
|
|||
|---|---|---|---|
|
#18+
Прошу прощения, я неправильно описал этот вопрос: автор группируя записи по msg_id он сначала возвращал записи, которые read=false, но если таких нету, то возвращал самую раннюю date_read, при этом отсеяв дубликаты по msg_id нужно группируя записи по msg_id вернуть записи, у которых sender_id != recipient_id и при этом, если есть read=true, то среди них вернуть самое меньшее значение date_read, иначе в поле read для этой записи вернуть false. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2015, 21:15 |
|
||
|
Запрос с условиями
|
|||
|---|---|---|---|
|
#18+
Random2как связать его с моей задачей - не представляюпопробуй перечитать данную тебе ссылку еще шесть раз. и выполнить пример. Random2вернуть записи, у которых sender_id != recipient_idа это уже перечитывай про where. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2015, 21:20 |
|
||
|
Запрос с условиями
|
|||
|---|---|---|---|
|
#18+
Random2... Да и одного DISTINCT, как я понимаю, маловато будет... Эм. Позвольте усомниться в Вашем понимании Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2015, 21:28 |
|
||
|
Запрос с условиями
|
|||
|---|---|---|---|
|
#18+
ursido, предложенный Вами вариант работает так, как нужно. Нужно было всего лишь сделать сортировку по нужным полям, т.к. я пробовал похожий запрос, но без сортировки по msg_queue.read. Также пробовал и условия (CASE..WHEN) и подзапросы, но не в ту сторону это все было. Спасибо за помощь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2015, 00:48 |
|
||
|
Запрос с условиями
|
|||
|---|---|---|---|
|
#18+
Random2Нужно было всего лишь сделать сортировку по нужным полям БЛДЖАД! А теперь почитаем документацию в слух: авторThe DISTINCT ON expressions are interpreted using the same rules as for ORDER BY (see above). Note that the "first row" of each set is unpredictable unless ORDER BY is used to ensure that the desired row appears first. авторThe DISTINCT ON expression(s) must match the leftmost ORDER BY expression(s). The ORDER BY clause will normally contain additional expression(s) that determine the desired precedence of rows within each DISTINCT ON group. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2015, 08:21 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=39038894&tid=1997799]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
175ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 501ms |

| 0 / 0 |
