While Schleifen Problem

01/20/2013 16:14 .Insane#1
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)
[Only registered and activated users can see links. Click Here To Register...]

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 MrPuschel#2
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 [Only registered and activated users can see links. Click Here To Register...].

Schau es dir mal an, eventuell hilft es dir weiter.
01/20/2013 17:01 Muddy Waters#3
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 .Insane#4
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 Muddy Waters#5
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 .Insane#6
Vielen Dank,
arbeitet einwandfrei.
Nur ist oben bei der Datenbank Abfrage ein Komma verloren gegangen (Bei Einstelldatum).
#closerequest