• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

[ERLEDIGT] Mysql Ausgabe gruppieren/sortieren

Tanja

Neues Mitglied
Mit Hilfe dieses Threads habe ich eine "fast" perfekte Ausgabe....

PHP:
function getdog()
{
$offspringresult = "
SELECT dog.id, dog.dogname, dog.father_id, dog.mother_id, dog.date_of_birth, b.dogname AS maker, CONCAT(dog.gender, '.png') AS sex 
FROM dog 
INNER JOIN dog b
ON dog.father_id = b.id
WHERE dog.mother_id='".$_GET['projectdescription1']."'

ORDER BY dog.dogname DESC
"; 
$result = mysql_query($offspringresult);
    
    $grouped = array();

    while ($row = mysql_fetch_object($result)) {
        $grouped[$row->date_of_birth][] = $row;
    }

    return $grouped;
}


$dog = getdog();

foreach ($dog as $date_of_birth => $entries) 
{
    echo '<h2>' . $date_of_birth . '</h2>';

    foreach ($entries as $entry) {
        echo '<p>' . $entry->dogname . '<img src=" '.$entry->sex.' "/></p>'; 
    }
}

Meine Ausgabe sieht so aus:
HTML:
2006-01-15
Amy from Bandit's World 
Akela from Bandit's World
Aiyana from Bandit's World

kann ich den Namen des Vaters noch hinter das Datum bekommen (bei mir maker)?
 
Du müsstest die Ausgabe von

PHP:
$entry->maker

innerhalb der 2. foreach-Schleife machen. Theoretisch könntest Du auch die Ausgabe des $date_of_birth darin machen - aber nur beim 1. Durchlauf, was man mit einer if-Bedingung entsprechend abfangen könnte.
 
Das ich
PHP:
$entry->maker
in der zweiten foreach abfragen kann hab ich schon selber herausgefunden ;-)
Dann hätte ich aber zu jedem Namen auch den maker dabei.
HTML:
2006-01-15 
Bandit - Amy from Bandit's World 
Bandit - Akela from Bandit's World 
Bandit - Aiyana from Bandit's World
ich möchte aber das der Name (neben dem Datum) nur einmal auftaucht (oder entsprechend, wenn der Hund fleissig war)
HTML:
2006-01-15 - Bandit
Amy from Bandit's World
  Akela from Bandit's World 
Aiyana from Bandit's World
 
Daher auch mein Hinweis auf die zusätzliche if-Bedingung in der 2. foreach-Schleife ;) Du musst dafür nur die Durchläufe in einer Variable hochzählen. Und wenn diese den Wert 1 (oder 0, je nachdem wo Du addierst) hat, gibst Du die Überschrift aus.
 
anders gelöst (lösen lassen):
PHP:
$result = mysql_query($offspringresult);
$grouped = array();
while ($row = mysql_fetch_object($result)) {
                 $grouped[$row->date_of_birth][$row->maker][] = $row;
}
return $grouped;
}

$dog = getdog2();
foreach ($dog as $date_of_birth => $entries)
{
        foreach ($entries as $maker => $entryArr) {
                echo "<h2>$date_of_birth - $maker</h2>";

                foreach ($entryArr as $entry) {
                echo '<p>' . $entry->dogname . '<img src=" '.$entry->sex.' "/></p>';
                }
                
        }
}
 
Zurück
Oben