SELECT mit Datensätzen in definierbarer Reihenfolge
SELECT mit Datensätzen in definierbarer Reihenfolge
am 04.02.2006 22:55:01 von Bodo Kaelberer
Hi
Konkret geht es im MySQL, aber eine allgemeine Lösung wäre natürlich
am besten.
Situation: Es ist eine Tabelle mit einer Spalte id als primaeren
Schlüssel. Eine Funktion liefert eine Reihe von ID-Werten in einer
sortierten Reihenfolge. Und eine andere Funktion soll nun die
Datensätzen zu diesen IDs holen - und zwar in derselben Reihenfolge
wie die IDs.
Wenn also die erste Funktion folgende IDs liefert:
17, 4, 15, 2
dann soll die zweite die Datensätze in der Reihenfolge:
17, Franz, 30
4, Otto, 51
15, Dieter, 43
2, Peter, 28
liefern.
Die zweite Funktion wählt die Datensätze mittels
WHERE id IN (...)
aus. Ich sehe da aber keine Möglichkeit mich bei der Sortierung an den
Werten im IN zu orientieren.
Ist so etwas über ein Statement möglich oder muss ich das in PHP
machen?
--
Re: SELECT mit Datensätzen in definierbarer Reihenfolge
am 05.02.2006 00:23:58 von Niels Braczek
Bodo Kaelberer schrieb:
> Wenn also die erste Funktion folgende IDs liefert:
> 17, 4, 15, 2
Diese Reihenfolge ist rein zufällig (ohne ORDER BY).
> dann soll die zweite die Datensätze in der Reihenfolge:
> 17, Franz, 30
> 4, Otto, 51
> 15, Dieter, 43
> 2, Peter, 28
> liefern.
Ohne ORDER BY keine Chance.
> Die zweite Funktion wählt die Datensätze mittels
>
> WHERE id IN (...)
>
> aus. Ich sehe da aber keine Möglichkeit mich bei der Sortierung an den
> Werten im IN zu orientieren.
Ich auch nicht.
> Ist so etwas über ein Statement möglich oder muss ich das in PHP
> machen?
Lies die Datensätze in ein Array mit ID als Schlüssel. Dann kannst du
gezielt auf jeden einzelnen Datensatz zugreifen.
MfG
Nield
--
| http://www.kolleg.de · Das Portal der Kollegs in Deutschland |
| http://www.bsds.de · BSDS Braczek Software- und DatenSysteme |
| Webdesign · Webhosting · E-Commerce · Mambo Content Management |
------------------------------------------------------------ ----
Re: SELECT mit Datensätzen in definierbarer Reihenfolge
am 05.02.2006 08:53:10 von Helmut Schmuckermair
> Wenn also die erste Funktion folgende IDs liefert:
>
> 17, 4, 15, 2
Wie hast Du diese Liste so sortiert? Kannst Du das sortieren nicht der
Datenbank überlassen?
> Die zweite Funktion wählt die Datensätze mittels
>
> WHERE id IN (...)
>
> aus. Ich sehe da aber keine Möglichkeit mich bei der Sortierung an den
> Werten im IN zu orientieren.
Also ich sehe da auch nur ein SELECT für jede id
Grüsse
Helmut
Re: SELECT mit Datensätzen in definierbarer Reihenfolge
am 05.02.2006 13:57:30 von Bodo Kaelberer
Hi
Helmut Schmuckermair am Sun, 05 Feb 2006 08:53:10 +0100:
> > Wenn also die erste Funktion folgende IDs liefert:
> >
> > 17, 4, 15, 2
>
> Wie hast Du diese Liste so sortiert? Kannst Du das sortieren nicht der
> Datenbank überlassen?
Das Sortieren der Liste der IDs geschieht in der Datenbank. Aber das
Gewinnen der IDs und die Behandlung der zugehörigen Datensätze
geschehen an unterschiedlichen Stellen im Code und nutzen Funktionen,
die die Parameter eben so erwarten.
Grundsätzlich könnte ich natürlich auch in der zweiten Funktion noch
einmal sortieren. Aber dann müsste ich die Infos, wonach sortiert
werden soll, mitschleppen - und die kennt bisher nur die erste.
--
Re: SELECT mit Datensätzenin definierbarer Reihenfolge
am 05.02.2006 13:57:49 von Knut Kohl
Hallo Bodo,
Bodo Kaelberer schrieb am 04. Feb 2006 in de.comp.lang.php.datenbanken:
> Wenn also die erste Funktion folgende IDs liefert:
> 17, 4, 15, 2
> dann soll die zweite die Datensätze in der Reihenfolge:
> 17, Franz, 30
> 4, Otto, 51
> 15, Dieter, 43
> 2, Peter, 28
> liefern.
> Die zweite Funktion wählt die Datensätze mittels
> WHERE id IN (...)
Wie wäre:
Nur EINE Funktion, die die Daten der 2. Tabelle mittels JOIN dazuholt?
> aus. Ich sehe da aber keine Möglichkeit mich bei der Sortierung an den
> Werten im IN zu orientieren.
Knut
--
Newsoffice.de - Die Onlinesoftware zum Lesen und Schreiben im Usenet
Re: SELECT mit Datensätzen in definierbarer Reihenfolge
am 05.02.2006 13:59:15 von Bodo Kaelberer
Niels Braczek am Sun, 05 Feb 2006 00:23:58 +0100:
> > Ist so etwas über ein Statement möglich oder muss ich das in PHP
> > machen?
>
> Lies die Datensätze in ein Array mit ID als Schlüssel. Dann kannst du
> gezielt auf jeden einzelnen Datensatz zugreifen.
Die ids in einer Schleife durchgehen und je den entsprechenden
Datensatz nehmen? Stimm - dann spare ich ein erneutes Sortieren
gänzlich, weil die Datensätze so nicht sortiert sein müssen.
Danke!
--
Re: SELECT mit Datensätzen in definierbarer Reihenfolge
am 05.02.2006 14:59:10 von Niels Braczek
Bodo Kaelberer schrieb:
> Niels Braczek am Sun, 05 Feb 2006 00:23:58 +0100:
>
>> Lies die Datensätze in ein Array mit ID als Schlüssel. Dann kannst du
>> gezielt auf jeden einzelnen Datensatz zugreifen.
>
> Die ids in einer Schleife durchgehen und je den entsprechenden
> Datensatz nehmen? Stimm - dann spare ich ein erneutes Sortieren
> gänzlich, weil die Datensätze so nicht sortiert sein müssen.
Du musst die Daten doch sowieso Satz für Satz aus der DB lesen. Es kommt
doch nur darauf an, die Zahl der Queries zu minimieren. Also setzt du
dein SELECT ... WHERE ... IN (...) ab und holst erst alle Datensätze,
auf die du dann in beliebiger Reihenfolge zugreifen kannst.
MfG
Niels
--
| http://www.kolleg.de · Das Portal der Kollegs in Deutschland |
| http://www.bsds.de · BSDS Braczek Software- und DatenSysteme |
| Webdesign · Webhosting · E-Commerce · Mambo Content Management |
------------------------------------------------------------ ----
Re: SELECT mit Datensätzen in definierbarer Reihenfolge
am 05.02.2006 17:12:11 von Bodo Kaelberer
Hi
Niels Braczek am Sun, 05 Feb 2006 14:59:10 +0100:
> > Die ids in einer Schleife durchgehen und je den entsprechenden
> > Datensatz nehmen? Stimm - dann spare ich ein erneutes Sortieren
> > gänzlich, weil die Datensätze so nicht sortiert sein müssen.
>
> Du musst die Daten doch sowieso Satz für Satz aus der DB lesen. Es kommt
> doch nur darauf an, die Zahl der Queries zu minimieren. Also setzt du
> dein SELECT ... WHERE ... IN (...) ab und holst erst alle Datensätze,
> auf die du dann in beliebiger Reihenfolge zugreifen kannst.
Scho klar. Schreib ich doch (-;
--
Re: SELECT mit Datensätzen in definierbarer Reihenfolge
am 05.02.2006 17:20:19 von Helmut Schmuckermair
> Das Sortieren der Liste der IDs geschieht in der Datenbank. Aber das
> Gewinnen der IDs und die Behandlung der zugehörigen Datensätze
> geschehen an unterschiedlichen Stellen im Code und nutzen Funktionen,
> die die Parameter eben so erwarten.
>
> Grundsätzlich könnte ich natürlich auch in der zweiten Funktion noch
> einmal sortieren. Aber dann müsste ich die Infos, wonach sortiert
> werden soll, mitschleppen - und die kennt bisher nur die erste.
Wenn alle Daten in der Datenbank stehen (?) reicht möglicherweise eine
einzige Abfrage - wie schon Knut vorgeschlagen hat.
Wenn Du die Datenstruktur genauer erläuterst, kann dir hier besser
geholfen werden.
Grüsse
Helmut
Re: SELECT mit Datensätzen in definierbarer Reihenfolge
am 05.02.2006 17:27:57 von Bodo Kaelberer
Hallo Knut
Knut Kohl am Sun, 05 Feb 2006 13:57:49 +0100:
> > Die zweite Funktion wählt die Datensätze mittels
> > WHERE id IN (...)
>
> Wie wäre:
> Nur EINE Funktion, die die Daten der 2. Tabelle mittels JOIN dazuholt?
Die Daten stammen aus einer einzigen Tabelle.
Und die "erste" Funktion ist eigentlich nicht EINE Funktion. Tat-
sächlich können die IDs aus verschienen Quellen stammen, u.a. auch
Cookies.
--
Re: SELECT mit Datensätzen in definierbarer Reihenfolge
am 05.02.2006 17:56:38 von Niels Braczek
Bodo Kaelberer schrieb:
> Niels Braczek am Sun, 05 Feb 2006 14:59:10 +0100:
>
>> > Die ids in einer Schleife durchgehen und je den entsprechenden
>> > Datensatz nehmen? Stimm - dann spare ich ein erneutes Sortieren
>> > gänzlich, weil die Datensätze so nicht sortiert sein müssen.
>>
>> Du musst die Daten doch sowieso Satz für Satz aus der DB lesen. Es kommt
>> doch nur darauf an, die Zahl der Queries zu minimieren. Also setzt du
>> dein SELECT ... WHERE ... IN (...) ab und holst erst alle Datensätze,
>> auf die du dann in beliebiger Reihenfolge zugreifen kannst.
>
> Scho klar. Schreib ich doch (-;
Na, dann issja gut ;-)
MfG
Niels
--
| http://www.kolleg.de · Das Portal der Kollegs in Deutschland |
| http://www.bsds.de · BSDS Braczek Software- und DatenSysteme |
| Webdesign · Webhosting · E-Commerce · Mambo Content Management |
------------------------------------------------------------ ----