ORDER BY frage....
am 29.05.2007 14:37:32 von michael.schuetterHi!
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