Hi,
vielleicht kann mir hier einer weiterhelfen, stehe total auf dem Schlauch.
Ich habe eine Tabelle mit Timestamps. Wenn ein Datensatz aufgerufen wird, soll es einen Link zum vorhergehenden und einen zum nächsten Datensatz geben. Problem ist, daß die Timestamps nicht unique sind und die Links dann nicht mehr stimmen.
Beispiel
Tabelle:
Code:
id | topicid | copyof | onoff | datum | headline | text
1 | 1 | | 0 | 1418770800 | Headline 1a | Text
2 | 2 | | 1 | 1418770800 | Headline 2a | Text
6 | 2 | | 1 | 1418770800 | Headline 3a | Text
7 | 2 | | 1 | 1418598000 | Headline 2c | Text
8 | 2 | | 1 | 1419375600 | Headline 2d | Text
9 | 1 | | 1 | 1418770800 | Headline 1b | Text
10 | 1 | | 1 | 1418857200 | Headline 1c | Text
11 | 1 | | 0 | 1418770800 | Headline 1d | Text
12 | 2 | 10 | 1
13 | 2 | 9 | 1
Der aktuell aufgerufene Datensatz hat die ID 6.
Select vorhergehender Datensatz:
PHP-Code:
SELECT DISTINCT d.id AS id, d.topicid, d.onoff, d.datum, copyd.id AS copydid, COALESCE(copyd.datum, d.datum) AS ddatum
FROM datas d
LEFT JOIN datas copyd ON copyd.id = d.copyof
WHERE d.topicid = 2 AND d.onoff = 1 AND ((d.datum BETWEEN 1418425200 AND 1418943600) OR (copyd.datum BETWEEN 1418425200 AND 1418943600)) AND d.id NOT IN (6) AND ((d.datum > 1418770800 OR copyd.datum > 1418770800) OR ((d.datum = 1418770800 OR copyd.datum = 1418770800) AND d.id > 6))
ORDER BY ddatum, id ASC LIMIT 1
Select nächster Datensatz:
PHP-Code:
SELECT DISTINCT d.id AS id, d.topicid, d.onoff, d.datum, copyd.id AS copydid, COALESCE(copyd.datum, d.datum) AS ddatum
FROM datas d
LEFT JOIN datas copyd ON copyd.id = d.copyof
WHERE d.topicid = 2 AND d.onoff = 1 AND ((d.datum BETWEEN 1418425200 AND 1418943600) OR (copyd.datum BETWEEN 1418425200 AND 1418943600)) AND d.id NOT IN (6) AND ((d.datum < 1418770800 OR copyd.datum < 1418770800) OR ((d.datum = 1418770800 OR copyd.datum = 1418770800) AND d.id < 6))
ORDER BY ddatum, id DESC LIMIT 1
Plan:
Die vor - zurück Links sollten mir die Datensätze mit den IDs 12 - 13 - 6 - 2 - 7 (in dieser Reihenfolge) liefern.
Ergebnis:
Der Link vorhergehender Datensatz klappt. Außer beim ersten Datensatz, da springt es zum zweiten - Result bei Aufruf der ID 12 sollte aber leer sein.
Der Link nächster Datensatz sprint immer zum letzten Datensatz (ID 7), egal wo ich gerade bin.
Hat jemand eine Idee? Ich arbeite übrigens mit einer SQLite DB, falls das eine Rolle spielt.