group by UND order by

Eiszwerg

Erfahrenes Mitglied
Hallo an alle Hilf-Wütigen,

folgende Tabelle

id ... datum ............ von.......bis.........wer
1......2003-12-01....12:00...18:00.....1
2......2003-12-01....10:00...16:00.....2
3......2003-12-02.....11:00..19:00.....2
4......2003-12-02.....14:00..17:00 ....1
5......2003-12-03.....09:00...16:00....2
6......2003-12-03.....10:00...18:00....1

Nun möchte ich diese Schichten farbig ausgeben (1=blau | 2=rot).
Dabei ist bedingung, dass die Farben immer abwechselnd untereinander stehen, damit man einen besseren Überblick hat.
Bisher hatte ich immer ORDER BY datum in der Abfrage stehen, was aber nicht ausreicht, da der Wert "wer" nicht immer abwechselnd 1 2 1 2 1 2 ist.

Wie kann ich die Abfrage umstrukturieren, damit auch der Wert "wer" berücksichtigt wird und immer wie gewüscht ausgegeben wird.

Ich habe es schon so versucht: GROUP BY datum ORDER BY wer ... leider führte das nicht zum gewünschten Erfolg. Habe ich da irgendetwas missverstanden?

Bitte klärt mich auf :)

Danke!
 
Zuletzt bearbeitet:
Wie willst du das ganze genau sortieren?
1. nach wer
2. Nach Datum, Startzeit, Endzeit
?

Ich würde da etwas anders rangehen, da ORDER BY soetwas nicht unterstützt (meines wissens)...

Mache 2 Abfragen.
1. Abfrage: SELECT * FROM tabelle WHERE wer=1
2. Abfrage: SELECT * FROM tabelle WHERE wer=2

Dann gehst du das ganze so durch:

PHP:
<?php
$conn = mysql_connect($host, $user, $pass);
mysql_select_db($database, $conn);
$res1 = mysql_query("SELECT * FROM tabelle WHERE wer=1", $conn);
$res2 = mysql_query("SELECT * FROM tabelle WHERE wer=2", $conn);
$anz1 = mysql_num_rows($res1);
$anz2 = mysql_num_rows($res2);
$anz = ($anz1 > $anz2) ? $anz1 : $anz2;

echo "<table>\n";
for($i=1;$i<=$anz;$i++) {
 if($i<$anz1) {
  $data = mysql_fetch_array($res1, MYSQL_ASSOC);
  outputData($data);
 }
 if($i<$anz2) {
  $data = mysql_fetch_array($res2, MYSQL_ASSOC);
  outputData($data);
 }
}
echo "</table>\n";

function outputData($data) {
 $col = ($data["wer"] == 1) ? "#B3B5FF" : "#E88686";
 echo "<tr><td bgcolor=\"".$col."\">".$data["datum"]."</td>
<td bgcolor=\"".$col."\">".$data["von"]."</td>
<td bgcolor=\"".$col."\">".$data["bis"]."</td></tr>\n";
}
?>
 
Zuletzt bearbeitet:
Hui,

da hast Du ja ganz schön vorgelegt ;)
Danke erstmal dafür.
Werde mal schauen, wieweit ich da durchsteige und was ich davon verwenden kann.
Um Deine Frage zu beantworten. Ich möchte primär nach Datum sortieren und sekundär einfach erzwingen, dass die Datensätze abwechselnd nach "wer " gelistet werden.

Beispiel:

1 2003-12-02 07:00 14:00 1
2 2003-12-02 08:00 15:00 2
3 2003-12-02 09:00 17:00 1
4 2003-12-02 08:00 15:00 2

Sodala... ich stürze mich dann mal in meinen Code ;)

Gruss ICEzW3RG
 
@Texaner:

Die von dir vorgeschlagene Abfrage bringt ihm nur eins...
Es wird nach Datum sortiert.
Nach wer soll aber nicht "sortiert" werden sondern der Wert 1 und 2 sollen sich abwechseln...

Hier der Code, der dich noch mit der Datumssortierung weiterbringt...

PHP:
<?php
$conn = mysql_connect($host, $user, $pass);
mysql_select_db($database, $conn);
$res1 = mysql_query("SELECT * FROM tabelle WHERE wer=1 ORDER BY datum ASC, von ASC, bis ASC", $conn);
$res2 = mysql_query("SELECT * FROM tabelle WHERE wer=2 ORDER BY datum ASC, von ASC, bis ASC", $conn);
$anz1 = mysql_num_rows($res1);
$anz2 = mysql_num_rows($res2);
$anz = ($anz1 > $anz2) ? $anz1 : $anz2;

echo "<table>\n";
for($i=1;$i<=$anz;$i++) {
 if($i<$anz1) {
  $data = mysql_fetch_array($res1, MYSQL_ASSOC);
  outputData($data);
 }
 if($i<$anz2) {
  $data = mysql_fetch_array($res2, MYSQL_ASSOC);
  outputData($data);
 }
}
echo "</table>\n";

function outputData($data) {
 $col = ($data["wer"] == 1) ? "#B3B5FF" : "#E88686";
 echo "<tr><td bgcolor=\"".$col."\">".$data["datum"]."</td>
<td bgcolor=\"".$col."\">".$data["von"]."</td>
<td bgcolor=\"".$col."\">".$data["bis"]."</td></tr>\n";
}
?>
 
Zurück