SELECT mit Datensätzen in definierbarer Reihenfolge

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?


--
Bodo Kaelberer [ Sa, 04 Februar 2006 22:55 ] [ ID #1172897 ]

Re: SELECT mit Datensätzen in definierbarer Reihenfolge

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 |
------------------------------------------------------------ ----
Niels Braczek [ So, 05 Februar 2006 00:23 ] [ ID #1172900 ]

Re: SELECT mit Datensätzen in definierbarer Reihenfolge

> 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
Helmut Schmuckermair [ So, 05 Februar 2006 08:53 ] [ ID #1173745 ]

Re: SELECT mit Datensätzen in definierbarer Reihenfolge

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.

--
Bodo Kaelberer [ So, 05 Februar 2006 13:57 ] [ ID #1173746 ]

Re: SELECT mit Datensätzen in definierbarer Reihenfolge

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!

--
Bodo Kaelberer [ So, 05 Februar 2006 13:59 ] [ ID #1173747 ]

Re: SELECT mit Datensätzenin definierbarer Reihenfolge

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
Knut Kohl [ So, 05 Februar 2006 13:57 ] [ ID #1173748 ]

Re: SELECT mit Datensätzen in definierbarer Reihenfolge

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 |
------------------------------------------------------------ ----
Niels Braczek [ So, 05 Februar 2006 14:59 ] [ ID #1173749 ]

Re: SELECT mit Datensätzen in definierbarer Reihenfolge

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 (-;

--
Bodo Kaelberer [ So, 05 Februar 2006 17:12 ] [ ID #1173750 ]

Re: SELECT mit Datensätzen in definierbarer Reihenfolge

> 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
Helmut Schmuckermair [ So, 05 Februar 2006 17:20 ] [ ID #1173751 ]

Re: SELECT mit Datensätzen in definierbarer Reihenfolge

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.

--
Bodo Kaelberer [ So, 05 Februar 2006 17:27 ] [ ID #1173752 ]

Re: SELECT mit Datensätzen in definierbarer Reihenfolge

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 |
------------------------------------------------------------ ----
Niels Braczek [ So, 05 Februar 2006 17:56 ] [ ID #1173753 ]
PHP » de.comp.lang.php.datenbanken » SELECT mit Datensätzen in definierbarer Reihenfolge

Vorheriges Thema: [FAQ/2006-02-05] Loesungen fuer deine PHP-Probleme
Nächstes Thema: Von Timestamp nur Uhrzeit abfragen