|
You last visited: Today at 22:33
Advertisement
While Schleifen Problem
Discussion on While Schleifen Problem within the Web Development forum part of the Coders Den category.
01/20/2013, 16:14
|
#1
|
elite*gold: 0
Join Date: Jun 2011
Posts: 670
Received Thanks: 118
|
While Schleifen Problem
Hey E*Pvpers,
ich habe ein Problem mit einer While Schleife.
Ich lasse die Kontakt Anfragen von meiner Website in eine Datenbank eintragen und schließlich im Admin Panel ausgeben.
Es geht jetzt speziell um die Sortierung der Personen, die eine Anfrage geschickt haben. Ich möchte, dass falls eine Person mir zweimal schreibt, sie wieder in die selbe Sparte einsortiert wird.
Hier ein Bild (Mit dem Fehler)
Wie ihr seht wird die Person allerdings zweimal angezeigt, da auch zwei Anfragen vorhanden sind (An der roten 2 zu erkennen). Allerdings soll die zweite Anfrage wieder bei der ersten mit einsortiert werden und somit dort nur einmal das Feld erscheinen.
Ich hoffe es versteht jemand, was ich meine. Hier nun der entsprechende Code:
Code:
<?php
$sql_kontakt_new = "SELECT
ID,
Vorname,
Nachname,
Strasse,
Hausnummer,
Wohnort,
Email,
Einstelldatum
Bearbeitet
FROM
nachricht
WHERE
Bearbeitet = '0'
ORDER BY
Einstelldatum DESC
";
$result_kontakt_new = mysql_query($sql_kontakt_new) OR die("<pre>\n".$sql_kontakt_new."</pre>\n".mysql_error());
while ($row_kontakt_new = mysql_fetch_assoc($result_kontakt_new)) {
$kontakt_new = mysql_query("SELECT * FROM nachricht WHERE Strasse = '".$row_kontakt_new['Strasse']."' AND Hausnummer = '".$row_kontakt_new['Hausnummer']."' AND Wohnort = '".$row_kontakt_new['Wohnort']."'");
$date = date_create($row_kontakt_new['Einstelldatum']);
echo "
<li>
<a href='?".$row_kontakt_new['Strasse']."".$row_kontakt_new['Hausnummer']."".$row_kontakt_new['Vorname']."".$row_kontakt_new['Nachname']."'>
<span class='contactName'>
<strong>".$row_kontakt_new['Vorname']." ".$row_kontakt_new['Nachname']."<span>(".mysql_num_rows($kontakt_new).")</span></strong>
<i>".$row_kontakt_new['Email']."</i>
</span>
<span class='status_available tipN' title='Noch nicht beantworet'></span>
</a>
</li>
";
}
?>
Wie kann ich die Schleife nun umschreiben, dass es so wie beschrieben angezeigt wird?
Vielen Dank.
Lg
|
|
|
01/20/2013, 16:46
|
#2
|
elite*gold: 0
Join Date: Apr 2005
Posts: 323
Received Thanks: 114
|
Ich bin mir nicht ganz sicher ob ich dein Problem richtig verstanden habe, aber was du beschreibst löst man i.d.R. innerhalb des SQL Statements mit  .
Schau es dir mal an, eventuell hilft es dir weiter.
|
|
|
01/20/2013, 17:01
|
#3
|
Administrator
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,653
|
Wenn du dir die Daten aus deiner ersten Abfrage zwischenspeicherst, kannst du dir die zweite Abfrage sparen. Das heißt im ersten Schritt liest du erstmal alles ein und speicherst die Daten in einem Array, danach sortierst bzw. gruppierst du es dir wie du es gerne hättest und im letzten Schritt gibst du die passig gruppierten Daten aus.
|
|
|
01/20/2013, 17:15
|
#4
|
elite*gold: 0
Join Date: Jun 2011
Posts: 670
Received Thanks: 118
|
Ich danke euch beiden.
Habe es jetzt mit "SELECT...FROM...WHERE...GROUP BY..." gelöst.
Edit: Leider doch noch nicht gelöst. Er gibt nur eine Person aus...
Mein Code:
Code:
<?php
$sql_kontakt_new = "SELECT
ID,
Vorname,
Nachname,
Strasse,
Hausnummer,
Wohnort,
Email,
Einstelldatum,
Bearbeitet
FROM
nachricht
WHERE
Bearbeitet = '0'
GROUP BY
Strasse AND
Hausnummer AND
Wohnort
";
$result_kontakt_new = mysql_query($sql_kontakt_new) OR die("<pre>\n".$sql_kontakt_new."</pre>\n".mysql_error());
while ($row_kontakt_new = mysql_fetch_assoc($result_kontakt_new)) {
$kontakt_new = mysql_query("SELECT * FROM nachricht WHERE Strasse = '".$row_kontakt_new['Strasse']."' AND Hausnummer = '".$row_kontakt_new['Hausnummer']."' AND Wohnort = '".$row_kontakt_new['Wohnort']."'");
$date = date_create($row_kontakt_new['Einstelldatum']);
echo "
<li>
<a href='?".$row_kontakt_new['Strasse']."".$row_kontakt_new['Hausnummer']."".$row_kontakt_new['Vorname']."".$row_kontakt_new['Nachname']."'>
<span class='contactName'>
<strong>".$row_kontakt_new['Vorname']." ".$row_kontakt_new['Nachname']."<span>(".mysql_num_rows($kontakt_new).")</span></strong>
<i>".$row_kontakt_new['Email']."</i>
</span>
<span class='status_available tipN' title='Noch nicht beantworet'></span>
</a>
</li>
";
}
?>
Muddy Waters könntest du mir das bitte an einem kleine Beispiel zeigen. Würde mir mehr helfen.
Danke
|
|
|
01/20/2013, 17:53
|
#5
|
Administrator
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,653
|
Einmal quick and dirty, ist ungetestet und könnten Fehler drin sein; vielleicht habe ich auch einen Denkfehler und die Variante funktioniert gar nicht:
PHP Code:
<?php $sql_kontakt_new = "SELECT ID, Vorname, Nachname, Strasse, Hausnummer, Wohnort, Email, Einstelldatum Bearbeitet FROM nachricht WHERE Bearbeitet = '0' ORDER BY Einstelldatum DESC "; $result_kontakt_new = mysql_query($sql_kontakt_new) OR die("<pre>\n".$sql_kontakt_new."</pre>\n".mysql_error());
$contacts = array();
while ($row_kontakt_new = mysql_fetch_assoc($result_kontakt_new)) $contacts[] = $row_kontakt_new;
$groups = array();
for($i = 0, $clenth = count($contacts); $i < $clenth; $i++) { $glength = count($groups); $j = 0; for( ; $j < $glength; $j++) { if($contacts[$i]['Strasse'] == $groups[$j]['Strasse'] && $contacts[$i]['Hausnummer'] == $groups[$j]['Hausnummer'] && $contacts[$i]['Wohnort'] == $groups[$j]['Wohnort']) break; } if($j >= $glength) // There is no such group yet { $groupitem = array('messagecount' => 1); foreach($contacts[$i] as $key => $val) $groupitem[$key] = $val; $groups[] = $groupitem; } else // We got an existing group at index $j that matches the contact at $i $groups[$j]['messagecount']++; }
for($i = 0, $glength = count($groups); $i < $glength; $i++) { $date = date_create($groups[$i]['Einstelldatum']); echo " <li> <a href='?".$groups[$i]['Strasse']." ".$groups[$i]['Hausnummer']." ".$groups[$i]['Vorname']." ".$groups[$i]['Nachname']."'> <span class='contactName'> <strong>".$groups[$i]['Vorname']." ".$groups[$i]['Nachname']."<span>(".$groups[$i]['messagecount'].")</span></strong> <i>".$groups[$i]['Email']."</i> </span> <span class='status_available tipN' title='Noch nicht beantworet'></span> </a> </li> "; } ?>
|
|
|
01/20/2013, 18:05
|
#6
|
elite*gold: 0
Join Date: Jun 2011
Posts: 670
Received Thanks: 118
|
Vielen Dank,
arbeitet einwandfrei.
Nur ist oben bei der Datenbank Abfrage ein Komma verloren gegangen (Bei Einstelldatum).
#closerequest
|
|
|
 |
Similar Threads
|
2 While Schleifen - Problem
12/25/2012 - AutoIt - 7 Replies
Abend epvp,
ich hab 2 GuiCreate Forms. $Form1 auf @SW_SHOW und $Form2 auf HIDE.
Damit $Form1 sich schließst und $Form2 sich öffnet wenn ich einen Button in $Form1 drücke, hab ichs so:
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
|
script problem mit for - next schleifen
10/02/2011 - AutoIt - 5 Replies
hi,
wie schon im titel beschrieben wollte ich dich um hilfe bitten
ich will die loop neustarten wenn die bestimmte farbe an der stelle eintritt wär nett wenn ihr mir helfen könntet
die Fehlermeldung lautet
func missi()
Error:"For" statement has no matching "Next" statement
|
iniwrite & for-schleifen Problem
06/27/2011 - AutoIt - 5 Replies
Hallo epvpers,
Ich ab mal ne frage; wie mach ich das wenn zwei Sachen, einmal aus einer Inputbox und einmal aus einer ini-datei nicht übereinstimmen dann eine neue Zeile in der ini angelegt wird(mit einem anderen Namen?)
Ich habs mal so aber da passiert nichts:
if not guictrlread($input5where)=IniRead(@WindowsDir& "\Teamspeak.ini", "Join", "Installpath", "") Then
for $i=0 to 1
IniWrite(@WindowsDir&"\Teamspeak.ini ", "Join", "Installpath"&+1, GUICtrlRead($Input5where))
next
|
While Schleifen Problem
12/31/2010 - AutoIt - 24 Replies
Hi Com.,
ich habe einen Fritzbox ip changer geschrieben.
Alles klappt wunderbar, nur macht mir die while schleife zu schaffen.
Hier mein Script.
#include <INet.au3>
|
Auto-Schleifen [Problem]
06/23/2010 - Off Topic - 10 Replies
Hallo,
und zwar brauche ich Informationen über das Schleifen.
Am besten wäre folgendes:
Woher kommt das Schleifen?
Wie schleift man richtig?
|
All times are GMT +1. The time now is 22:33.
|
|