2016-12-15 4 views
-1

Ich möchte Titel nur einmal und dann eine Liste aller Benutzer mit korrekten n_id zurückgeben.pdo bestimmte Zeile einmal auswählen

Ich habe solche Tabelle:

| N_ID | USER | TITLE | 
|------|-------|--------| 
| 1 | User1 | Title1 | 
| 1 | User2 | Title1 | 
| 1 | User3 | Title1 | 
| 2 | User3 | Title5 | 

Mein Code so weit:

$sql = $this->conn->prepare("SELECT * FROM n_list WHERE n_id = :id"); 
$sql->bindparam(":id", $id); 
$sql->execute(); 
while($rows = $sql->fetch(PDO::FETCH_ASSOC)) 
{ 
echo 'Title: '.$rows["title"].' <br></br>'; 
echo $rows["user"]; 
} 

Derzeit gibt es mir dies:

Title: Title1 
User1 
Title: Title1 
User2 
Title: Title1 
User3 

Ich brauche das als Ergebnis:

Title: Title1 
User1 
User2 
User3 

Wie bekomme ich die Titelzeile vor while-Schleife? Kann ich dort einen weiteren Abruf hinzufügen oder eine weitere Abfrage hinzufügen?

Ich bin neu zu PDO so leid, wenn die Lösung für Sie offensichtlich aussieht!

+0

GROUP BY oder DISTINCT ist Ihr Freund –

+0

Mit in Ihrer Schleife speichern Sie die N_ID. Wenn sich die N_ID ändert, drucken Sie den Titel aus. –

+0

@bub Group von gibt mir nur ein Ergebnis. Distinct funktioniert nicht und druckt dasselbe wie in meinem Beispiel. – lyraX

Antwort

0

Das Suchen einer Flagge, um zu wissen, dass der Titel gedruckt wurde, sollte funktionieren.

$sql = $this->conn->prepare("SELECT * FROM n_list WHERE n_id = :id"); 
$sql->bindparam(":id", $id); 
$sql->execute(); 

$flagtitle = 0; 

while($rows = $sql->fetch(PDO::FETCH_ASSOC)) 
{ 
    if($flagtitle == 0){ 
    echo 'Title: '.$rows["title"].' <br>'; 
    $flagtitle = 1; 
    } 
    echo $rows["user"].'<br>'; 
} 
+0

Ja, das hat funktioniert! Vielen Dank! Sie haben jedoch einige Fehler in Ihrem Code. $ flagtitle = 1 'sollte $ flagtitle = 1 sein; – lyraX