Query / Sortierung

Query / Sortierung

am 26.01.2006 14:33:25 von Michael Kuroll

Hallo dcdm!

Folgende Tabellenstruktur ist mir vorgegeben:

CREATE TABLE `uo_traffic` (
`uo_traffic_id` int(30) NOT NULL auto_increment,
`uo_traffic_cid` int(3) NOT NULL default '0',
`uo_traffic_ts` int(30) NOT NULL default '0',
`uo_traffic_day` int(2) NOT NULL default '0',
`uo_traffic_month` int(4) NOT NULL default '0',
`uo_traffic_year` int(5) NOT NULL default '0',
`uo_traffic_traffic` varchar(30) NOT NULL default '',
`uo_traffic_cuser` int(10) NOT NULL default '0',
PRIMARY KEY (`uo_traffic_id`)
) TYPE=MyISAM;

In dieser Tabelle befinden sich mehrere Tausend Datensätze und es kommen
regelmässig welche hinzu. Ich benötige nun die letzten eingefügten
Datensätze für bestimmte Werte von uo_traffic_cid.

Folgendener Query funktioniert:

SELECT uo_traffic_cid, uo_traffic_cuser FROM uo_traffic WHERE
uo_traffic_cid IN (1,6,7,8,9,10,12) ORDER BY uo_traffic_id DESC LIMIT 7

Allerdings würde mir eine Sortierung nach uo_traffic_cuser im Ergebnis
weitere Schleifen im Programm ersparen.

Kennt jemand eine Möglichkeit das hinzukriegen?

Vielen Dank,
lg
Mike

Re: Query / Sortierung

am 26.01.2006 14:51:11 von Guy Walter

Michael Kuroll wrote:

> Folgendener Query funktioniert:
>
> SELECT uo_traffic_cid, uo_traffic_cuser FROM uo_traffic WHERE
> uo_traffic_cid IN (1,6,7,8,9,10,12) ORDER BY uo_traffic_id DESC LIMIT 7
>
> Allerdings würde mir eine Sortierung nach uo_traffic_cuser im Ergebnis
> weitere Schleifen im Programm ersparen.
>
> Kennt jemand eine Möglichkeit das hinzukriegen?


Mir fällt da spontan nur das hier ein:

SELECT uo_traffic_cid, uo_traffic_cuser FROM uo_traffic WHERE
uo_traffic_id = ( SELECT uo_traffic_id FROM uo_traffic WHERE
uo_traffic_cid IN (1,6,7,8,9,10,12) ORDER BY uo_traffic_id DESC LIMIT 7
) ORDER BY uo_traffic_cuser

Musst Du mal testen, gibt bestimmt noch eine bessere Lösung.

Gruss Guy

Re: Query / Sortierung

am 26.01.2006 14:56:48 von Michael Kuroll

Am Thu, 26 Jan 2006 14:51:11 +0100 schrieb Guy Walter:

> SELECT uo_traffic_cid, uo_traffic_cuser FROM uo_traffic WHERE
> uo_traffic_id = ( SELECT uo_traffic_id FROM uo_traffic WHERE
> uo_traffic_cid IN (1,6,7,8,9,10,12) ORDER BY uo_traffic_id DESC LIMIT 7
> ) ORDER BY uo_traffic_cuser

Danke!
Jetzt seh ich erst das die MySQL Version <4.1 ist und somit keine
Subselects möglich sind. *ärger*

Ich werde natürlich für eine neuere Version plädieren, allerdings liegt das
in diesem Fall eher ausserhalb meines Einflussbereiches.

Gibts da noch andere Möglichkeiten?

lg
Mike

Re: Query / Sortierung

am 26.01.2006 15:07:21 von Guy Walter

Michael Kuroll wrote:
>
> Gibts da noch andere Möglichkeiten?
>

Versuch es mal mit temporären Tabelle, das sollte auch gehen

CREATE TEMPORARY TABLE test
SELECT uo_traffic_cid, uo_traffic_cuser FROM uo_traffic WHERE
uo_traffic_cid IN (1,6,7,8,9,10,12) ORDER BY uo_traffic_id DESC LIMIT 7

SELECT uo_traffic_cid, uo_traffic_cuser FROM test ORDER BY uo_traffic_cuser

Nagel mich jetzt nicht auf die Syntax fest. Ist frei aus der Hand
formuliert.

Re: Query / Sortierung

am 26.01.2006 18:14:45 von Michael Kuroll

Am Thu, 26 Jan 2006 15:07:21 +0100 schrieb Guy Walter:

>> Gibts da noch andere Möglichkeiten?

> Versuch es mal mit temporären Tabelle, das sollte auch gehen
>
> CREATE TEMPORARY TABLE test
> SELECT uo_traffic_cid, uo_traffic_cuser FROM uo_traffic WHERE
> uo_traffic_cid IN (1,6,7,8,9,10,12) ORDER BY uo_traffic_id DESC LIMIT 7
> SELECT uo_traffic_cid, uo_traffic_cuser FROM test ORDER BY uo_traffic_cuser

> Nagel mich jetzt nicht auf die Syntax fest. Ist frei aus der Hand
> formuliert.

hmm, da brauch ich wieder mehrere Queries. Ich denk ich sortier das doch im
Programm - das wird warscheinlich einfach sein.

Danke trotzdem
lg
Mike