Ho una tabella come questa:Come creare un limite dinamico in MySQL?
// notifications
+----+--------------+------+---------+------------+
| id | event | seen | id_user | time_stamp |
+----+--------------+------+---------+------------+
| 1 | vote | 1 | 123 | 1464174617 |
| 2 | comment | 1 | 456 | 1464174664 |
| 3 | vote | 1 | 123 | 1464174725 |
| 4 | answer | 1 | 123 | 1464174813 |
| 5 | comment | NULL | 456 | 1464174928 |
| 6 | comment | 1 | 123 | 1464175114 |
| 7 | vote | NULL | 456 | 1464175317 |
| 8 | answer | NULL | 123 | 1464175279 |
| 9 | vote | NULL | 123 | 1464176618 |
+----+--------------+------+---------+------------+
sto cercando di selezionare almeno 15 righe per utente specifico. Appena ci sono due condizioni:
sempre tutte le righe da leggere (
seen = NULL
) devono essere abbinate, anche se sono più di 15 righe.Se il numero di righe non lette è superiore a 15, è inoltre necessario selezionare 2 righe di lettura (
seen = 1
).
Esempi:read
è il numero di righe di lettura e unread
è il numero di righe da leggere nella notifications
tavolo.
read | unread | output should be
------|--------|-------------------------------------
3 | 8 | 11 rows
12 | 5 | 15 rows (5 unread, 10 read)
20 | 30 | 32 rows (30 unread, 2 read)
10 | 0 | 10 rows (0 unread, 10 read)
10 | 1 | 11 rows (1 unread, 10 read)
10 | 6 | 15 rows (6 unread, 9 read)
100 | 3 | 15 rows (3 unread, 12 read)
3 | 100 | 102 rows (100 unread, 2 read)
Ecco il mio query corrente, non supporta seconda condizione.
SELECT id, event, seen, time_stamp
FROM notifications n
WHERE id_user = :id AND seen IS NULL
) UNION
(SELECT id, event, seen, time_stamp
FROM notifications n
WHERE id_user = :id
ORDER BY (seen IS NULL) desc, time_stamp desc
LIMIT 15
)
ORDER BY (seen IS NULL) desc, time_stamp desc;
Basta selezionare tutto invisibile e (unione con) 15 visto. Dopo questo troncano (lato client) a 15 se ci sono meno di 15 non visti. –
La tua seconda subquery ha mancato la condizione 'visto non è nulla' –
@vp_arth La tua idea contiene alcuni punti utili. grazie. –