pcguy
Goto Top

MYSQL ausgabe

Hallo zusammen

Ich versuche gerade einen DB inhalt gefiltert auszugeben.

DB:
[id] - [parent_id] - [title] - [url] - [class] - [position] - [group_id ]

Die Verbindung steht:

 
<? 
// Verbindung zum Datenbankserver
	$db=mysql_connect("$servername", "$username", "$password") or die (mysql_error ());  
	
	if ($db==false) { echo "Keine Verbindung möglich!"; exit; } // if  

// Datenbank auswählen
	mysql_select_db("$dbname") or die(mysql_error());   
	mysql_set_charset('utf8');  

	// SQL-Query
	$strSQL = "SELECT * FROM menu WHERE group_id = '1' ";  


	// Query ausführen (die Datensatzgruppe $rs enthält das Ergebnis)
	$rs = mysql_query("$strSQL ")or die ("Fehlermeldung = ". mysql_error());  
	
	// ende Verbindung
?> 

Nur bei der Ausgabe komm ich nicht ganz weiter, ich möchte mit dem Tabelleninhalt ein Dropdown befüllen.


 
<select class="form-control">  
  <option>Master</option>
  <option>--- Slave</option>
  <option>--- Slave</option>
  <option>Master</option>
  <option>Master</option>
</select>

Master : "parrent_id" = 0
Slave : "id" == "parrent_id"


Wie löse ich das am besten, mit einem if oder was schlagt Ihr vor?

Content-ID: 269747

Url: https://administrator.de/contentid/269747

Ausgedruckt am: 21.11.2024 um 22:11 Uhr

114757
114757 21.04.2015 aktualisiert um 10:07:57 Uhr
Goto Top
echo '<select class="form-control">';  
while ($row = mysql_fetch_assoc($rs)) {
    if ($row['parent_id'] == 0){  
       echo '<option>Master</option>';  
    } else{
       echo '<option>--- Slave</option>';  
    }
}
echo '</select>';  
p.s. Denk dringend darüber nach aktuellere Zugriffsfunktionen für MySQL zu benutzen (PDO). Die einfachen mysql Funktionen sind schon längst als "depricated" gekennzeichnet!

Gruß jodel32
SlainteMhath
SlainteMhath 21.04.2015 aktualisiert um 10:01:24 Uhr
Goto Top
Moin,

ich glaube eher das ist eine auf sich selbst referenzierende Tabelle - also eher so:

SELECT <tabelle>.* as Master
JOIN <tabelle>.* as Slave ON Slave.parent_id = Master.id
ORDER BY Master.id

echo '<select class="form-control">';  
while ($row = mysql_fetch_assoc($rs)) {
    if ($row['parent_id'] == 0){  
       echo '<option>Master</option>';  
    } else 
       echo '<option>--- Slave</option>';  
    }
}
echo '</select>';  

lg,
Slainte
pcguy
pcguy 21.04.2015 aktualisiert um 11:08:27 Uhr
Goto Top
Danke für eure Feedbacks

@114757: Das Submenu wird nicht dem richtigem Master zugewiesen?
Fehlt da eine if mit "id" == "parrent_id" ?

@slainte: Deine Select bringt mir eine Fehlermeldung.....oder ich habe sie falsch angepasst.
SlainteMhath
SlainteMhath 21.04.2015 um 11:11:20 Uhr
Goto Top
kA ob das dem Mysql Syntax entspricht... kann auch sein, das MySQL kein "AS" will/braucht. Schau doch mal in die Doku.

oder ich habe sie falsch angepasst.
das werden wir nie erfahren, es sei denn du postest "dein" query + "deine" Fehlermeldung face-smile
Biber
Biber 21.04.2015 aktualisiert um 11:23:12 Uhr
Goto Top
Moin pcguy,

Slainte hat einen Flüchtigkeitsfehler in dem ersten Statement.

Alt:
SELECT <tabelle>.* as Master
JOIN <tabelle>.* as Slave ON Slave.parent_id = Master.id
ORDER BY Master.id

Korrekturvorschlag:
SELECT Master.* FROM <tabelle> as Master
JOIN <tabelle> as Slave ON Slave.parent_id = Master.id
ORDER BY Master.id

Grüße
Biber
SlainteMhath
SlainteMhath 21.04.2015 um 11:27:52 Uhr
Goto Top
SELECT Master.* FROM <tabelle> as Master
Ja, das FROM sollte man tatsächlich nicht weglassen - Danke @Biber face-smile
pcguy
pcguy 21.04.2015 aktualisiert um 14:18:39 Uhr
Goto Top
Danke, der Fehler ist weg, aber irgendwie kommt nur ein Titel?

Der komplette Code:


<?php
// Verbindung zum Datenbankserver
	$db=mysql_connect("$servername", "$username", "$password") or die (mysql_error ());  
	if ($db==false) { echo "Keine Verbindung möglich!"; exit; }   

// Datenbank auswählen
	mysql_select_db("$dbname") or die(mysql_error());   

// SQL-Query
	//$strSQL = "SELECT * FROM menu WHERE group_id = '1' "; 
	$strSQL = "SELECT Master.* FROM menu as Master JOIN menu as Slave ON Slave.parent_id = Master.id ORDER BY Master.id";  

// Query ausführen (die Datensatzgruppe $rs enthält das Ergebnis)
	$rs = mysql_query("$strSQL ")or die ("Fehlermeldung = ". mysql_error());  

// Schließt die Datenbankverbindung
	mysql_close();


echo '<select class="form-control">';  
			while ($row = mysql_fetch_assoc($rs)) {
    			if ($row['parent_id'] == 0){  
       				echo '<option>'.$row['title'].'</option>';  
    			} else 
       				echo '<option>--- '.$row['title'].'</option>';  
    			}
		echo '</select>';  
?>
Biber
Biber 21.04.2015 aktualisiert um 15:24:24 Uhr
Goto Top
Moin pcguy,

wir können doch auch nur im Nebel stochern, weil wir nur ein paar Annahmen über die Struktur und die Zusammenhänge deiner Daten machen können.

Slaintes Annahme mit einer selbst referenzierenden Tabelle mag ja zutreffen, aber dennoch wird sich der Resultset deiner ersten Abfrage
SELECT * FROM menu WHERE group_id = '1' 
... inhaltlich doch wohl unterscheiden von dem neuen Statement
SELECT Master.* FROM menu as Master JOIN menu as Slave ON Slave.parent_id = Master.id..

- Das erste Statement liefert alles, was zur group_id = '1' gehört.
- Das zweite Statement liefert nur diejenigen Einträge, die mindestens für einen anderen Datensatz der "Parent" sind.
Allerdings egal welche Group_id das ist, egal ob sie selber einen Parent haben oder nicht.

Auch ohne tiefergehendes Verständnis für Datenbankabfragen drängt sich mir die Vermutung auf, die beiden Abfrageformulierungen könnten möglicherweise manchmal unterschiedliche Ergebnisse liefern.
Okay, ich kann auch Datenkonstellationen konstruieren, bei der das Resultset identisch ist, aber zwingend ist das nicht.

Deshalb bitte noch mal für uns, die wir nicht auf deinem Monitor alles mitverfolgen können:
- wie sehen denn 5 "typische Datensätze" aus, die in der der Tabelle "menu" stehen?
- was soll abgefragt werden? Eine Gruppe? Alle Gruppen?
- wie viele Stufen hat denn die Gruppenhierarchie? Gibt es Childs, dessen Parent einen Parent hat, der einen Parent hat ?

Grüße
Biber
114757
114757 21.04.2015 aktualisiert um 15:24:04 Uhr
Goto Top
Zitat von @pcguy:

Danke, der Fehler ist weg, aber irgendwie kommt nur ein Titel?
Du hast die schließende geschweifte Klammer der While-Schleife vergessen face-wink !
pcguy
pcguy 21.04.2015 um 15:34:25 Uhr
Goto Top
Wo müsste eine sein?
pcguy
pcguy 21.04.2015 aktualisiert um 15:38:46 Uhr
Goto Top
Die DB :

--
-- Tabellenstruktur für Tabelle `menu`
--

CREATE TABLE IF NOT EXISTS `menu` (
`id` tinyint(3) unsigned NOT NULL,
`parent_id` tinyint(3) unsigned NOT NULL DEFAULT '0',
`title` varchar(255) NOT NULL DEFAULT '',
`url` varchar(255) NOT NULL DEFAULT '',
`class` varchar(255) NOT NULL DEFAULT '',
`position` tinyint(3) unsigned NOT NULL DEFAULT '0',
`group_id` tinyint(3) unsigned NOT NULL DEFAULT '1'
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=51 ;

--
-- Daten für Tabelle `menu`
--

INSERT INTO `menu` (`id`, `parent_id`, `title`, `url`, `class`, `position`, `group_id`) VALUES
(9, 0, '<i class=''fa fa-star icon-w''></i>Favoriten', '/products', '', 1, 1),
(14, 0, '<i class=''fa fa-paw icon-w''></i>Tiere', '/products/furniture/cabinet', '', 3, 1),
(15, 0, '<i class=''fa fa-cogs icon-w''></i>Zubehoer', '/products/furniture/chair', '', 7, 1),
(49, 14, 'Katzen', '', '', 3, 1),
(48, 14, 'Hunde', '', '', 2, 1);


Das müsste so aussehen ( Nur 2 Ebenen):

Favoriten
Tiere
-- Katzen
-- Hunde
Zubehoer
114757
114757 21.04.2015 aktualisiert um 15:43:37 Uhr
Goto Top
Zitat von @pcguy:

Wo müsste eine sein?
Na am Ende von Zeile 26, oder in eine neue Zeile dahinter.
Rücke deinen Code vernünftig ein, dann siehst du das sofort...
pcguy
pcguy 21.04.2015 um 15:48:31 Uhr
Goto Top
Ich sehe keine die nicht geschlossen ist face-sad
SlainteMhath
SlainteMhath 21.04.2015 um 15:59:00 Uhr
Goto Top
Zitat von @114757:

> Zitat von @pcguy:
>
> Wo müsste eine sein?
Na am Ende von Zeile 26, oder in eine neue Zeile dahinter.
Rücke deinen Code vernünftig ein, dann siehst du das sofort...

Nein das passt schon. nach dem "else" in Zeile 24 geht ja keine auf, deswegen macht die Klammer in Z. 26 die While Schleife zu.
(Hab ich auch erst beim 5ten hinscheun gesehen face-smile )
Biber
Biber 21.04.2015 aktualisiert um 16:42:46 Uhr
Goto Top
Moin pcguy,

um bei deinen Daten an ein brauchbares Resultset zu kommen, sollte dann folgendes Statement reichen:

  select id
   , case when parent_id=0 then title else '--- ' ||title  end  as title   
   from menu where group_id = 1;

Liefert (für group_id=1) die zwei Felder, die du maximal brauchst für dein Dropdown
ID | TITLE                                     
---+-------------------------------------------
 9 | <i class='fa fa-star icon-w'></i>Favoriten
14 | <i class='fa fa-paw icon-w'></i>Tiere     
15 | <i class='fa fa-cogs icon-w'></i>Zubehoer 
49 | --- Katzen                                 
48 | --- Hunde                                  

Das Statement von Slainte würde als Rückgabe zwei baugleiche Datensätze liefern, nämlich 2x die ID 14, weil das die einzige ID ist, die Childdatensätze hat.
Damit kannst du nicht wirklich viel machen.

"Mein" Resultset brauchst du nur einmal durchfetchen und das Feld "title" ohne weitere Prüfung übernehmen.

Grüße
Biber

P.S. Ich wäre nie darauf gekommen, dass die Information "hat keinen Parent" abgebildet sein könnte als "parent_id=0".
Ich hätte da NULL vermutet und nicht "hat eine parent_id mit dem Wert 0, die es aber nicht gibt".
Biber
Biber 22.04.2015 um 09:12:56 Uhr
Goto Top
Moin,

noch eine Ergänzung zu meinem letzten Kommentar.

Da du ja die Menu-Titel letztendlich "sortiert" benötigst, d.h. jeden Untermenüpunkt unterhalb des Parentmenüpunkts, wäre ein entsprechendes ORDER BY angebracht.

Dann sähe das Statement so aus:
  select -- id,
   case when parent_id=0 then title else '--- ' ||title  end  as title   
   from menu where group_id = 1
   order by case when parent_id = 0 then id *1000 else parent_id*1000 + id end;

... und die sortierte Liste so (die ID hab ich rausgelassen, ist hier ohne Mehrwert):
TITLE
<i class='fa fa-star icon-w'></i>Favoriten
<i class='fa fa-paw icon-w'></i>Tiere
--- Hunde
--- Katzen
<i class='fa fa-cogs icon-w'></i>Zubehoer

Grüße
Biber
pcguy
pcguy 22.04.2015 aktualisiert um 17:43:46 Uhr
Goto Top
Hallo Biber, vielen Dank, dass sieht schon recht gut aus.

Im Ergebnis ist allerdings noch was nicht ganz ok, oder muss ich die Ausgabe noch anpassen?


echo '<select class="form-control">';  
		while ($row = mysql_fetch_assoc($rs)) 
		{
    		if ($row['parent_id'] == 0)  
		{	echo '<option>'.$row['title'].'</option>'; 	}   
		else 
       		echo '<option> --- '.$row['title'].'</option>';  
    		}
		echo '</select>';  


Bei den Slave kommt eine "0" und nicht "--- Hunde ...." ?
Biber
Biber 22.04.2015 aktualisiert um 18:30:29 Uhr
Goto Top
Moin pcguy,

ähhm... welches Statement hast du denn jetzt verwendet??

Weder das letzte noch das vorletzte enthalten eine ($row['parent_id'], die du prüfen könntest.
Ausserdem hatte ich oben geschrieben:
"Mein" Resultset brauchst du nur einmal durchfetchen und das Feld "title" ohne weitere Prüfung übernehmen.

Die Phrase "ohne weitere Prüfung" - bedeutet übersetzt in etwa: du brauchst da keine IF/ELSE-Mimik mehr.

Memo an mich: Ich sollte die Verwendung von Fachtermini reduzieren oder auf die engsten Familienangehörigen beschränken.

Grüße
Biber
pcguy
pcguy 22.04.2015 um 18:47:37 Uhr
Goto Top
das letzte.

Du hast mich erwischt, bin absolut kein php Profi face-smile
pcguy
pcguy 25.04.2015 um 08:25:19 Uhr
Goto Top
Kann mir bitte jemand bei der Ausgabe weiterhelfen?

Meine Versuche scheitern kläglich:

/* execute statement */
    $rs->execute();

    /* bind result variables */
    $rs->bind_result($master, $slave);

    /* fetch values */
    while ($rs->fetch()) {
        printf ("%s (%s)\n", $master, $slave);  
    }

    /* close statement */
    $stmt->close();
pcguy
pcguy 27.04.2015 um 13:27:58 Uhr
Goto Top
@boardadmin: Bitte diesen Beitrag löschen ...
Biber
Biber 27.04.2015 aktualisiert um 14:04:53 Uhr
Goto Top
Moin pcguy,

Zitat von @pcguy:

@boardadmin: Bitte diesen Beitrag löschen ...
Weil? Wegen?

Wenn es einen überzeugenden Grund gibt, diesen Beitrag zu entsorgen, dann schick bitte an den zuständigen Moderator (mich) eine erhellende PN.

Andernfalls ist es nicht der Sinn dieses Forums, eine von 3 verschiedenen Helferlein mit verschiedenen Lösungsvorschlägen beantwortete Frage einfach zu löschen,
Es soll doch auch eine mögliche Hilfestellung für andere mit einem ähnlichen Problem sein, warum also brauchbare Lösungsansätze verwerfen?

Ein bisschen verwundert
Biber
pcguy
pcguy 27.04.2015 um 14:26:37 Uhr
Goto Top
Hallo Biber, ja gut .... für mich ist das ganze verwirrend und hat mich nicht auf die Lösung gebracht.
Aber wenn es anderen hilft ....ok.

Eventuell würde es Sinn machen "Spende einen Kaffee" zu integrieren.
Somit könnten die "Gurus" den "Anfängern" helfen die kleinen Problemchen zu beheben.
Und wir könnten dann einen "Kaffee" offerieren für die Hilfe.

lg pcguy
Biber
Biber 27.04.2015 aktualisiert um 17:16:47 Uhr
Goto Top
Moin pcguy,

na ja, so soll es ja nicht enden, dass du hier eine Frage stellst und hinterher ratloser bist als vorher.

Okay, in diesem Thread ist einiges durcheinander gegangen, auch weil die Anforderungen nicht ganz klar waren und auch die dazugehörigen Datenstrukturen.

Und erschwerend kam dazu, dass ein Teil der Lösungsvorschläge das vermeintliche Problem auf der PHP-Seite sah, andere das Problem rein auf der Datenbank/SQL-Seite.

Wo nun angesetzt werden soll - mir ist es auch noch nicht klar.
Denn auch bezogen auf deine geposteten Testdaten - es gibt keinen logisch erkennbaren Zusammenhang zwischen Daten und der von dir gewünschten Sortierung des Optionsfelds. Auch das vorhandene Feld "position", das ich zuerst im Verdacht hatte, die "logische Sortierung" zu steueren, kann dieses nicht leisten.

Da kannst nur du etwas Klarheit reinbringen, nur du kennst den ganzen Plan von "ich will die Menustrukturen verwalten durch folgendes Konzept".


Und den Kommentar vom 25.04. - den hat sicherlich keiner hier verstanden und daher auch keiner geantwortet.
Bitte versuch da noch mal eine Neuformulierung, aus der ersichtlich ist, was denn die Diskrepanz zwischen Wunsch und Wirklichkeit ist.
Also was du da versuchst und was du erwartest und was stattdessen passiert.

Ich würde den Beitrag lieber irgendwann "gelöst" sehen statt "gelöscht".

Grüße
Biber
pcguy
pcguy 28.04.2015 aktualisiert um 17:36:30 Uhr
Goto Top
Hallo Biber, danke für Dein Interesse!

Folgendes: Ich habe ein Script mit dem ich verschiede Navigationen erstellen kann und die werden in die DB geschrieben.
Das funktioniert soweit auch sehr gut.

Nun muss ich die Daten die in der DB sind noch richtig ausgeben.
Ich habe Deine DB Abfrage integriert:

 
<?php
// Verbindung zum Datenbankserver
	$db=mysql_connect("$servername", "$username", "$password") or die (mysql_error ());  
	if ($db==false) { echo "Keine Verbindung möglich!"; exit; }   

// Datenbank auswählen
	mysql_select_db("$dbname") or die(mysql_error());   

// SQL-Query
	$strSQL= " select -- id, case when parent_id=0 then title else '--- ' ||title  end  as title from menu where group_id = 1 order by case when parent_id = 0 then id *1000 else parent_id*1000 + id end";  

// Query ausführen (die Datensatzgruppe $rs enthält das Ergebnis)
	$rs = mysql_query("$strSQL ")or die ("Fehlermeldung = ". mysql_error());  

// Schließt die Datenbankverbindung
	mysql_close();
?>

Nun fehlt es an der Ausgabe des SQL-Query in dem Dropdown Menu.
Allerdings habe ich von der Funktion "fetch" zuvor noch nie gehört face-smile

Ich hoffe das ich alle benötigen Infos geliefert habe.
Biber
Biber 28.04.2015 aktualisiert um 19:14:56 Uhr
Goto Top
Moin pcguy,

okay, das Statement wird nicht funktionieren, weil...

Mit "-- " ( line comment bewirkst du, dass alles was nach diesen Zeichen in derselben Zeile steht, ignoriert wird.
In meinem Beispiel-Statement (mit mehreren Zeilen) wurde damt entsprechend nur " id, " auskommentiert.
Wenn du das Statement als insgesamt eine Zeile umformatierst, dann wird wesentlich mehr auskommentiert. face-wink

Bitte ändere das Statement in Zeile 11 dahingehend, dass du die Textfolge "-- id, " einfach rauslöscht.

Die Vokabel "fetch" oder durchfetchen" im SQL-Kontext ist schnell erklärt.

In der Regel bekommst du einen "Resultset", eine virtuelle Liste von Datensätzen als Ergebnis einer SQL-Abfrage zurück.
Wenn du diese Liste von Datensätzen nacheinander einzeln bearbeiten willst, dann wackelst du angefangen vom ersten Datensatz an von einem Datensatz zum nächsten bis zum letzten Datensatz.

Das "Durchwackeln" heisst auf Abiturienten-Niveau "iterieren" und das Aktivieren des nächsten Datensatzes als "den aktuellen" wird als "fetch" bezeichnet.
Da verwendest dafür beispielsweise das Konstrukt while ($row = mysql_fetch_assoc($rs)) { meine Verarbeitung}..

Das würde übersetzt in verständliches Denglisch in etwa bedeuten: "Solange beim Durchwackeln der Ergebnisliste ein Datensatz vorhanden ist, mach mit dem "meine Verarbeitung".
Und genau dieses Durchfetchen hast du im Eröffnungsbeitrag oder zumindest ziemlich weit oben verwendet.

So, und nun probier mal, ob das Statement jetzt irgendwas Durchwackelbares zurückliefert.

Grüße
Biber
pcguy
pcguy 02.05.2015 um 14:05:32 Uhr
Goto Top
Hallo Biber, ok ich starte noch einen Versuch face-wink

Das Statement habe ich geändert in
 
$strSQL= " select  case when parent_id=0 then title else '--- ' ||title  end  as title  from menu where group_id = 1 order by case when parent_id = 0 then id *1000 else parent_id*1000 + id end";  

Nun versuche ich die Daten "Durchzuwaxckeln:
echo '<select class="form-control">';    
                  while ($row = mysql_fetch_assoc($rs))  { echo '<option>'.$row['title'].'</option>' ;}   
echo '</select>';  

Das funktioniert soweit recht gut, ausser das bei den Subnav anstelle des Titels eine 0 raus kommt?

liebe Grüsse
pcguy
Biber
Biber 04.05.2015, aktualisiert am 05.05.2015 um 09:43:34 Uhr
Goto Top
Moin pcguy,



bzw. in deinem Beispiel
Von jetzt:
$strSQL= " select  case when parent_id=0 then title else '--- ' ||title  end  as title  from menu where group_id = 1 order by case when parent_id = 0 then id *1000 else parent_id*1000 + id end";  

ändern auf
$strSQL= " select  case when parent_id=0 then title else CONCAT('--- ' , title)  end  as title";  
$strSQL = $strSQL  . " from menu where group_id = 1 ";  
$strSQL = $strSQL  . "order by case when parent_id = 0 then id *1000 else parent_id*1000 + id end";  

Grüße
Biber

[Edit Biber] Semikolon am Ende Zeile 2 und 3 ergänzt. Siehe Kommentar pcguy.[/Edit]
pcguy
pcguy 05.05.2015 um 08:31:58 Uhr
Goto Top
Guten morgen Biber

Super, Danke!
Ich habe am ende der Zeile 1 & 2 das ; hinzugefügt ..... nun funktioniert es wie gewünscht face-smile

Kann ich die Ausgabe auch aufteilen damit ein weiteres Menu als Bootstrap Accordion ausgeben wird?


 
<?php
echo '<div class="panel-group archiv" id="accordion" role="tablist" aria-multiselectable="true" >';    
           while ($row = mysql_fetch_assoc($rs))  
	{ 
				  
			  
echo '  <div class="panel panel-default">';   
echo '  <div class="panel-heading" role="tab" id="'. $row['id'] .'">  
           <h4 class="panel-title">  
           <a class="collapsed" data-toggle="collapse" data-parent="#accordion" href="#collapse'. $row['id'] .'" aria-expanded="false" aria-controls"collapse1"="">  
                   '.$row['title'].'  
             </a>
             </h4>
             </div>';  

echo '	<div style="height: 0px;" aria-expanded="false" id="collapse'. $row['id'] .'" class="panel-collapse collapse" role="tabpanel" aria-labelledby="'. $row['id'] .'">  
              	<div class="panel-body">  
                 <ul> ';  // wenn untermenüs zum hauptmenü vorhanden sind  
		 echo '<li> <a href=index.php?page=archiv&content=4&cat='.$row['title'].'> <i class="fa fa-caret-right"></i>&nbsp;'.$row['title'].'</a>  </li>  
		</ul> 
              	</div>
            	</div>';  
			
echo '</div> '; 			    
?> 
Biber
Biber 05.05.2015 aktualisiert um 11:21:59 Uhr
Goto Top
Moin pcguy,

bei deiner Zusatzfrage muss ich wieder an die PHP-Fraktion übergeben.
Ich kann PHP gerade mal halbwegs lesen, aber nichts schreiben, das im ersten Anlauf aus eigener Kraft lauffähig ist.

Viel Glück
Biber
pcguy
pcguy 26.05.2015 aktualisiert um 17:35:59 Uhr
Goto Top
Leider finde ich keine Lösung für das Bootstrap Accordion Menu.

// SQL-Query
$strSQL = "SELECT * FROM menu WHERE group_id = '1' ";  

print'   <div class="panel-group archiv" id="accordion" role="tablist" aria-multiselectable="true" >';  
      
while ($values = mysql_fetch_assoc($rs)) {
/* Hauptmenu Punkte*/
  if ($values["parent_id"] == 0){   
   print ' <div class="panel panel-default">  
            <div class="panel-heading" role="tab" id="'. $values["id"] .'">  
              <h4 class="panel-title">  
                <a class="collapsed" data-toggle="collapse" data-parent="#accordion" href="#collapse'. $values["id"] .'" aria-expanded="false" aria-controls"collapse1"="">  
                   '.$values["title"].'  
                </a>
              </h4>
            </div>
            <div style="height: 0px;" aria-expanded="false" id="collapse'. $values["id"] .'" class="panel-collapse collapse" role="tabpanel" aria-labelledby="'. $values["id"] .'">  
              <div class="panel-body">  
                 <ul>';        
		/* Untermenu*/		 
		if ($values["id"] == $values["parent_id"]){ echo ' <li><a href=/archiv&content=4&cat=test > <i class="fa fa-caret-right"></i> &nbsp; '.$values["title"].' </a></li>'; }	 	  	    
              echo '  </ul>   
              </div>
            </div>
         </div>	 ';	  
	}
	}    
print '</div>';   

Kann mir bitte jemand einen Denkanstoss geben.
Im Moment erscheint kein Untermenu.

Ich bin mir nicht sicher ob die erste if ($values["parent_id"] == 0) </code daran schuld ist.