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