Zur Navigation

Schleife auslesen [2]

11 Jörg Kruse

Wenn das so funktioniert, dann werde ich die Inhalte halt ändern statt "neu" dann 1 und "alt" dann 0.

Ja, wenn neu = 1, dann müsstest du MAX statt MIN nehmen in der Query - aber das sieht man dann auch am Ergebnis :)

Wie sieht denn dann genau der Code aus (mein zugesandter Code angepasst mit deinem Vorschlag)?

Wann hast du mir den zugesandt?

03.12.2007 15:16

12 Frank

Diesen Code:

$abfrage_kunden1 = mysql_query("SELECT DISTINCT ID, Name FROM Kunden ORDER BY ID ASC");
while($row_kunden1 = mysql_fetch_array($abfrage_kunden1))
{
    $kundenid = $row_kunden1['ID'];
    $kunden_name = $row_kunden1['Name'];

    	$resultGesamt = @mysql_query("SELECT COUNT(*) AS menge FROM Bestand WHERE
    	(status = 'neu') AND (kunde = '$kundenid') ORDER BY kunde ASC");

    	$Anzahl = @mysql_result($resultGesamt,0,"menge");

         if ($Anzahl < 1)
	{
   	$kunden_anzeige.= "<option class=\"norm\" value=\"$kundenid\">$kunden_name</option>";
	}
	else
	{
   	$kunden_anzeige.= "<option class=\"red\" value=\"$kundenid\">$kunden_name</option>";
	}

}

03.12.2007 15:23

13 Jörg Kruse

Der Code aus Beitrag 1? Ich dachte mit "zugesandt" meinstest du eine Email :)

Dei von mir vorgeschlagene Query soll die Abfrage außerhalb der Schleife ersetzen:

$abfrage_kunden1 = mysql_query("SELECT Kunden.ID, Kunden.Name, MAX(Bestand.status) AS MaxStatus FROM Kunden JOIN Bestand ON Kunden.ID = Bestand.kunde GROUP BY Kunden.ID ORDER BY MaxStatus DESC, Kunden.ID ASC");

Hier wird zuerst nach MaxStatus DESC sortiert, Kunden mit neuen Einträgen sollten demnach zuerst gelistet werden

In der Schleife liest du dann auch MaxStatus aus:

    $kundenid = $row_kunden1['ID'];
    $kunden_name = $row_kunden1['Name'];
    $MaxStatus = $row_kunden1['MaxStatus'];

Danach kannst du dann unterscheiden, ob die Beiträge rot eigefärbt werden oder nicht:

if ($MaxStatus == 1) {
    $class = 'red';
} else {
    $class = 'norm';
}

Die Ausgabe innerhalb der Schleife:

$kunden_anzeige.= "<option class=\"$class\" value=\"$kundenid\">$kunden_name</option>";

Musst mal probieren, ob dies so funktioniert

03.12.2007 16:41

14 Frank

Hi Jörg,

ich erhalte dann jedoch "NUR" die rot markierten angezeigt. Alle anderen Kunden ohne Einträge werden mir nicht mehr angezeigt.

04.12.2007 11:58

15 Jörg Kruse

Hallo Frank,

wieso "alle anderen": hast du in Bestand nur Einträge mit status = 1?

Ich habe mal gerade getestet:

Kunden, die in Bestand aufgeführt sind, werden in der gewünschten Reihenfolge und Farbe gelistet - ich habe dann sowohl rote als auch schwarze Einträge

Allerdings werden keine Kunden aufgelistet, die zwar in Kunden aber nicht in Bestand aufgelistet sind. Aber ein LEFT JOIN anstelle von JOIN behebt dieses Problem:

$abfrage_kunden1 = mysql_query("SELECT Kunden.ID, Kunden.Name, MAX(Bestand.status) AS MaxStatus FROM Kunden LEFT JOIN Bestand ON Kunden.ID = Bestand.kunde GROUP BY Kunden.ID ORDER BY MaxStatus DESC, Kunden.ID ASC");

04.12.2007 12:54 | geändert: 04.12.2007 12:56

16 Frank

Das funktioniert jetzt soweit , nur sollen nun zuerst alle rot markierten Einträge angezeigt werden und dann alle übrigen!

Gruß Frank

04.12.2007 14:20

17 Jörg Kruse

Das ist bei meiner Testseite der Fall: zuerst werden die roten Beiträge angezeigt, dann die anderen.

Die Query $abfrage_kunden1 entspricht bei dir genau der in Beitrag 13?

Und die Spalte status in der Tabelle Bestand kann nur die Werte 0 (für "alt") und 1 (für "neu") annehmen?

04.12.2007 14:54

18 Frank

Hier mein Code:

$abfrage_kunden1 = mysql_query("SELECT Kunden.ID, Kunden.Name, MAX(Bestand.status) AS MaxStatus FROM Kunden JOIN Bestand ON Kunden.ID = Bestand.kunde GROUP BY Kunden.ID ORDER BY MaxStatus DESC, Kunden.ID ASC");
while($row_kunden1 = mysql_fetch_array($abfrage_kunden1))
{
   $kundenid = $row_kunden1['ID'];
   $kunden_name = $row_kunden1['Name'];
   $MaxStatus = $row_kunden1['MaxStatus'];


if ($MaxStatus == 1)
{
   $class = 'norm';
} else {
   $class = 'red';
}
$kunden_anzeige.= "<option class=\"$class\" value=\"$kundenid\">$kunden_name</option>";
}

Neu = 0
Alt = 1

04.12.2007 14:58

19 Jörg Kruse

Die Query ist ok (bis auf das fehlende LEFT) - aber du hast weiter unten die CSS-Klassen vertauscht, so werden die Einträge korrekt eingefärbt :):

if ($MaxStatus == 1)
{
  $class = 'red';
} else {
  $class = 'norm';
}

Edit:
ach bei dir ist neu = 0 - ich würde besser 1 nehmen für neu, dann funktioniert diese Sortierung korrekt. Bei neu = 0 müsste man MIN statt MAX nehmen - aber das haut dann u.U. nicht mit den Kunden hin, die nur in der Tabelle Kunden vorkommen...

04.12.2007 15:06 | geändert: 04.12.2007 15:09

20 Jörg Kruse

Nachtrag:

ich habe nochmal getestet. Bei neu = 0 und Sortierung mithilfe von MIN funktioniert die Sortierung nicht hinsichtlich der Kunden, welche nur in der Tabelle Kunden gelistet sind. Deswegen würde ich für neu = 1 setzen und für alt = 0. Das hat nach meinem Test soweit funktioniert.

04.12.2007 15:19