![]() |
Datenbank: MySQL • Version: ? • Zugriff über: PHP
Zum nächsten Datensatz springen
Ich versuche gerade mit einem SQL-Statement die ID des nächsten Datensatzes zu bekommen:
Code:
(OK, das drumherum ist PHP, aber das ist egal.)
function getNextID($id) {
$query = "SELECT * FROM adressen WHERE (gesch_firma > ( SELECT gesch_firma FROM adressen WHERE id = $id )) OR (name > ( SELECT name FROM adressen WHERE id = $id )) OR (vorname > ( SELECT vorname FROM adressen WHERE id = $id )) ORDER BY gesch_firma, name, vorname ASC limit 0,1"; $resPrev = mysql_query ($query); $prevID = mysql_fetch_object($resPrev); return $prevID->id; } Allerdings springt er mir so nur zwischen zwei Datensätzen hin und her. Zu beachten ist, dass nicht immer alle Felder (gesch_firma, name, vorname) einen Wert haben, also leer sein können. Dann sollen die Datensätze der Reihenfolge gesch_firma, name, vorname durchgeblättert werden, so wie sie auch sortiert sind. Als Vorlage diente mir diese Seite: ![]() |
AW: Zum nächsten Datensatz springen
Ich glaube der verrammelt da was mit der Oder-Verknuepfung.
Trenne das mal in 3 einzelne Abfragen auf und implementiere die Logik selbst if ($idFirma != "") { $prevID = $idFirma } else { usw. |
AW: Zum nächsten Datensatz springen
Ich denke, mit Aggregatfunktionen käme man weiter.
SQL-Code:
SELECT MIN(ID)
FROM Tabelle WHERE ID > :aktuelle_ID |
AW: Zum nächsten Datensatz springen
Oder mit Limitierung
SQL-Code:
SELECT
TOP 1 ID FROM Tabelle WHERE ID > :aktuelle_ID; |
AW: Zum nächsten Datensatz springen
Aber dann müsstest Du zur Sicherheit noch nach ID sortieren, wenn ich gerade keinen Denkfehler mache.
|
AW: Zum nächsten Datensatz springen
Wer zur Sicherheit besser, obwohl es bei der Id auch so stimmen sollte
|
AW: Zum nächsten Datensatz springen
Delphi-Quellcode:
So kann das nicht gut gehen:
$query = "SELECT * FROM adressen
WHERE (gesch_firma > ( SELECT gesch_firma FROM adressen WHERE id = $id )) OR (name > ( SELECT name FROM adressen WHERE id = $id )) OR (vorname > ( SELECT vorname FROM adressen WHERE id = $id )) ORDER BY gesch_firma, name, vorname ASC limit 0,1"; der 1. Teil des where liefert alle Datensätze, in denen gesch_firma grösser als im aktuellen Datensatz ist. der 2. Teil liefert ALLE Datensätze, in denen name grösser als im aktuellen Datensatz ist, aber natürlich auch jene, in denen gesch_firma kleiner als im aktuellen Datensatz ist. Im 3. Teil werden dann noch ALLE Datensätze geliefertt, bei denen der Vorname grösser ist. Damit erhältst du aber eine Menge Sätze, die laut aktueller Sortierfolge vor dem aktuellen Datensatz liegen. Prinzipiell müsste eine Bedingung bei drei Sortierkriterien a,b und c in etwa so aussehen: where (a>a0) or ((a=a0) and (b>b0)) or ((a=a0) and (b=b0) and (c>c0)) Zitat:
|
AW: Zum nächsten Datensatz springen
Zitat:
[/quote]Prinzipiell müsste eine Bedingung bei drei Sortierkriterien a,b und c in etwa so aussehen: where (a>a0) or ((a=a0) and (b>b0)) or ((a=a0) and (b=b0) and (c>c0))[/quote] Aber a0, b0 und c0 habe ich ja nicht. Zitat:
|
AW: Zum nächsten Datensatz springen
Zitat:
Code:
$query = "SELECT * FROM adressen
WHERE (gesch_firma > ( SELECT gesch_firma FROM adressen WHERE id = $id )) OR ((gesch_firma = ( SELECT gesch_firma FROM adressen WHERE id = $id )) and (name > ( SELECT name FROM adressen WHERE id = $id ))) OR ((gesch_firma = ( SELECT gesch_firma FROM adressen WHERE id = $id )) and (name = ( SELECT name FROM adressen WHERE id = $id )) and (vorname > ( SELECT vorname FROM adressen WHERE id = $id ))) ORDER BY gesch_firma, name, vorname ASC limit 0,1"; |
AW: Zum nächsten Datensatz springen
Es ist übrigens Quatsch, alle Felder abzufragen, wenn man nur die ID braucht.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz