ORDER BY frage....

ORDER BY frage....

am 29.05.2007 14:37:32 von michael.schuetter

Hi!

Frage zu "komplexer" ORDER BY

Meine DB struktur sieht so aus:

// Verschiendene kategorien
CREATE TABLE `kader` (
`id` int(10) unsigned NOT NULL auto_increment,
`kader_beschreibung` varchar(255) collate latin1_general_ci default
NULL,
PRIMARY KEY (`id`)
);

// stammblätter von Personen
// unter 'kader' jeweils ein verweis auf die obige Kaderkategorie
CREATE TABLE `stammblatt` (
`id` int(10) unsigned NOT NULL auto_increment,
`vorname` varchar(255) collate latin1_general_ci default NULL,
`nachname` varchar(255) collate latin1_general_ci default NULL,
`geschlecht` varchar(20) collate latin1_general_ci default NULL,
`strassse` varchar(255) collate latin1_general_ci default NULL,
`plz` varchar(20) collate latin1_general_ci default NULL,
`ort` varchar(255) collate latin1_general_ci default NULL,
`kader` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
);

// eine crosstable die mir Testdaten mit den jeweiligen stammblatt
verknüft
CREATE TABLE `test_crosstable` (
`id` int(10) unsigned NOT NULL auto_increment,
`erstellt_am` date default NULL,
`stammblatt_id` int(10) unsigned default NULL,
`test_daten_id` int(10) unsigned default NULL,
PRIMARY KEY (`id`)
) ;

// eingeliche testdaten
CREATE TABLE `test_data` (
`id` int(10) unsigned NOT NULL auto_increment,
`grosse` int(10) unsigned default NULL,
`gewicht` float default NULL,
`bmi` float default NULL,
`iat` int(10) unsigned default NULL,
PRIMARY KEY (`id`),
);

Meine aktuelle Query lautet:

SELECT test_crosstable.*, test_data.*, stammblatt.*
FROM test_crosstable INNER JOIN test_data
ON( test_crosstable.test_data_daten_id =3D test_data.id ) INNER JOIN
stammblatt ON ( test_crosstable.stammblatt_id =3D stammblatt.id )
WHERE ....
ORDER BY ORDER BY erstellt_am DESC;

Was ich jetzt realisieren will, ist eine query die mir den gejointen
table wie folgt sortiert zurückgibt:

1) Nach 'test_crosstable.erstellt_am' DESC ( das macht es ja schon )
2) innerhalb der sortiertem 'test_crosstable.erstellt_am' nach
'stammblatt.geschlecht' ( w oder m als block zusammenfassen )
3) innerhalb der sortiertem 'stammblatt.geschlecht' nach
'stammblatt.nachnamen'
soriert.

Schematisch soll es dann so aussehen:
Test 1.1.2007
Vorname1 Name1 W
Vorname2 Name2 W
Vorname3 Name3 W
Vorname4 Name4 W
Vorname1 Name1 M
Vorname2 Name2 M
Vorname3 Name3 M
Vorname4 Name4 M
Test 1.1.2006
Vorname1 Name1 W
Vorname4 Name4 W
Vorname3 Name3 M
Vorname4 Name4 M
Test 1.1.2004
Vorname1 Name1 W

wie kann ich das mit einem SQL ausdruck realisieren?

greets n thx mike

Re: ORDER BY frage....

am 29.05.2007 15:05:27 von Michael Ziegler

Servus,

michael.schuetter@gmail.com wrote:
> 1) Nach 'test_crosstable.erstellt_am' DESC ( das macht es ja schon )
> 2) innerhalb der sortiertem 'test_crosstable.erstellt_am' nach
> 'stammblatt.geschlecht' ( w oder m als block zusammenfassen )
> 3) innerhalb der sortiertem 'stammblatt.geschlecht' nach
> 'stammblatt.nachnamen'
> soriert.

grundsätzlich gilt:
Wenn du mehrere Kriterien mit Komma getrennt in der ORDER-BY-Klausel
angibst, werden diese in der gegebenen Reihenfolge angewendet. So eine
Sortierung wie du sie willst, ist daher kein Problem, und folgende
Order-By-Klausel dürfte das hinkriegen:

ORDER BY test_crosstable.erstellt_am DESC,
stammblatt.geschlecht ASC,
stammblatt.nachname ASC

Gruß,
Michael

Re: ORDER BY frage....

am 29.05.2007 16:08:38 von michael.schuetter

> ORDER BY test_crosstable.erstellt_am DESC,
> stammblatt.geschlecht ASC,
> stammblatt.nachname ASC
>
> Gruß,
> Michael

cool, so simple.....naja wissen muß manns!

big thx schuetti...