Antworten auf deine Fragen:
Neues Thema erstellen

Abfrage 1Wert 1x andere Wert in Schleife

johanna52

Interessierte

Hallo alle zusammen,
ich komm nicht drauf: eine Abfrage funktioniert nur in einer while-Schleife, sonst bekomme ich eine Fehlermeldung. Wenn ich nun 2 oder mehr Orte mit diesen PLZ habe, erscheint auch jedesmal die Überschrift 32500 - 32599 über den Ort - nun ja, wie bekomme ich es hin, daß die Überschrift nur einmal erscheint und dadrunter dann alle Orte.

# PLZ 32500 - 32599
$read_news="SELECT * FROM tabelle WHERE online='1' AND plz LIKE '325%' ORDER BY navlink ASC";
$read_news_result=mysql_query($read_news);
while($row=mysql_fetch_array($read_news_result))
{

if ($row[plz] == "")
{
echo "";
}
else {
echo "<a href=\"#\"><strong>32500 - 32599</strong></a>";
}

echo "<li><a href=\"edition.php?news_id=$row[news_id]\">$row[navlink]</a></li>";
}


Bin für jeden Tipp dankbar.
 

K

kam1kaze

Guest

AW: Abfrage 1Wert 1x andere Wert in Schleife

Hallo Johanna,

so würde ich es machen, ohne zu viel Code zu verändern:

# PLZ 32500 - 32599
$read_news="SELECT * FROM tabelle WHERE online='1' AND plz LIKE '325%' ORDER BY navlink ASC";
$read_news_result=mysql_query($read_news);
$num_rows = mysql_num_rows($read_news_result);
if (
$num_rows > 0)
{
echo "<
a href=\"#\"><strong>32500 - 32599</strong></a>";
}

while($row=mysql_fetch_array($read_news_result))
{

if ($row[plz] == "")
{
echo "";
}

echo "<li><a href=\"edition.php?news_id=$row[news_id]\">$row[navlink]</a></li>";
}

Greets,

kam1kaze
 

Haetti

Nicht mehr ganz neu hier

AW: Abfrage 1Wert 1x andere Wert in Schleife

wieso hast du eigentlich die Abfrage

Code:
if ($row[plz] == "")
{
echo "";
}
du liest ja in der SQL-Query sowieso nur Einträge aus, deren Postleitzahl mit 325 beginnen. Somit kann der Fall $row[plz] == "" gar nie true sein.

Und selbst wenn du die Query evtl. manchmal abänderst, und dies der Fall sein könnte, gäbe echo ""; ja nicht viel Sinn. In diesem Fall würde ich eher überprüfen, ob plz NICHT "" ist und das else weglassen. Sprich:

Code:
if (strlen($row[plz])) {
echo "<a href=\"#\"><strong>32500 - 32599</strong></a>";
}

In meinem Beispiel habe ich überprüft, ob der String $row[plz] eine Länge hat. Dies geht schneller als Stringvergleiche ($string == ""), da diese immer sehr unperformant sind.

Hm... bin wohl ein bisschen abgeschweift. Hoffe, du hast mein Beitrag dennoch verstanden.
 
Zuletzt bearbeitet:

johanna52

Interessierte

AW: Abfrage 1Wert 1x andere Wert in Schleife

zum besserem Verständnis - ich baue damit eine Navigation über mehrere PLZ - da in der Datenbank später noch weitere Orte mit anderen PLZ geschreiben werden, sollen diese später automatisch in der Navigation (unterteilt) erscheinen. Der Bereich PLZ 32500 - 32599 ist zur Zeit noch nicht belegt, was sich aber in Kürze ändern könnte:
 

Haetti

Nicht mehr ganz neu hier

AW: Abfrage 1Wert 1x andere Wert in Schleife

in dem Fall würde ich es folgendermassen machen:

In der Query sämtliche Bereiche auslesen:
Code:
$read_news="SELECT LEFT(plz, 3) AS bereich FROM tabelle WHERE online='1' GROUP BY bereich ORDER BY bereich ASC";
[COLOR=Black]$read_news_result=mysql_query($read_news);[/COLOR]
Dies liest die vorhandenen Postleitzahlen aus, nimmt davon jeweils die ersten 3 Ziffern und gruppiert dann gleiche zusammen, sodass du diese nur 1 mal hast.

Anschliessend gibst du diese folgendermassen aus:
Code:
while($row=mysql_fetch_array($read_news_result))
{
    echo $row[bereich]."00 - ".$row[bereich]."99<br />";
}
Ich hoffe, ich hab dich richtig verstanden und keine Fehler in den ungetesteten Code programmiert.

Gruss
Hätti


edit: hab das ORDER BY navlink durch ORDER BY bereich ersetzt
 
Zuletzt bearbeitet:

johanna52

Interessierte

AW: Abfrage 1Wert 1x andere Wert in Schleife

gut, der Bereich wird ja auch bisher richtig ausgegeben, aber die Überschrift soll erst erscheinen, wenn es eine dieser PLZ in der Datenbank gibt - diese darf aber nicht in der Schleife stehen, da diese ja nur einmal oben drüber erscheinen soll

der Vorschlag von kam1kaze klappt bei mir leider nicht:

$num_rows = mysql_num_rows($read_news_result);
if ($num_rows > 0)
{
echo "<a href=\"#\"><strong>32500 - 32599</strong></a>";
}
 

Haetti

Nicht mehr ganz neu hier

AW: Abfrage 1Wert 1x andere Wert in Schleife

ach so... du willst alles bereits ausgeben, mit jeweils der Überschrift 32500-32599.

dann würde ich folgendes machen:

Bei der Query das plz LIKE '325%' rausnehmen (natürlich nur, falls du wirklich alle anzeigen willst. Aber das kannst du handhaben wie du willst).

anschliessend würde ich die while-Schlaufe so machen:

Code:
// als erstes initialisierst du eine Variable, in der gespeichert ist, welches
// der aktuelle Bereich ist
$bereich = 0;

while($row=mysql_fetch_array($read_news_result))
{
  // in erste Ziffern speicherst du die ersten 3 Ziffern der PLZ
  $ersteZiffern = substr($row[plz], 0, 3); 

  // nun überprüfst du vor der Ausgabe, ob der Bereich dieser PLZ noch zum alten
  // gehört. Wenn nicht, gibst du den Titel des neuen Bereichs aus
  if ($ersteZiffern != $bereich) {
    [COLOR=Black]echo "<[/COLOR]a href=\"#\"><strong>".$bereich."00 - ".$bereich."99</strong></a><br />";

    // nun speicherst du den "neuen" Bereich in der Variable, so dass dieser nicht mehr
    // ausgegeben wird
    $bereich = $ersteZiffern;
  }

  // und zuletzt kannst du den Eintrag anzeigen
  echo "<li><a href=\"edition.php?news_id=$row[news_id]\">$row[navlink]</a></li>";
}
 

Haetti

Nicht mehr ganz neu hier

AW: Abfrage 1Wert 1x andere Wert in Schleife

ups, wahrscheinlich hast du den Fehler mittlerweile bereits bemerkt, aber es müsste

echo "<
a href=\"#\"><strong>".$ersteZiffern."00 - ".$ersteZiffern."99</strong></a><br />";


heissen und nicht

echo "<
a href=\"#\"><strong>".$bereich."00 - ".$bereich."99</strong></a><br />";
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.611
Beiträge
1.538.341
Mitglieder
67.524
Neuestes Mitglied
BSKGA
Oben