Mysql Abfrage Marke und Typ

itchyfeet

Grünschnabel
Hallo Zusammen,
ev werde ich mich Hauen wenn ich die Lösung sehe, aber im Moment hänge ich fest.

Ich habe eine Datenbank mit den Spalten Marke, Typ, Farbe und Text.

Ich möchte nun die Marke nur einmal anzeigen und die Dazugehörigen Typen soviel es hat.

Marke1 Typ1
Typ2
Typ3
Marke2 Typ1
Typ2

usw...

PHP:
 $sql = mysql_query("SELECT DISTINCT marke
                      FROM ".compat." ORDER BY marke");
                      
   while ($data = mysql_fetch_assoc($sql))

  $sql2 = mysql_query("SELECT DISTINCT typ,bracket,adapter,notes,color
                      FROM ".compat." WHERE marke LIKE ".$data["marke"]."");

  while ($data2 = mysql_fetch_assoc($sql2))
  {

     echo "<tr>";
        echo "<td width=205 valign=top><span style='color:".$data2["color"]."'> ".$date["marke"]." </span></td>";
        echo "<td width=205 valign=top><span style='color:".$data2["color"]."'> ".$data2["typ"]." </span></td>";
        if ($data["bracket"] !=0) {echo "<td width=50 valign=top><span style='color:".$data2["color"]."'> ".$data2["bracket"]." </span></td>";} else {echo "<td width=50 valign=top> &nbsp </td>";}
        if ($data2["adapter"] ==X) {echo "<td width=50 valign=top><span style='color:".$data2["color"]."'> ".$data2["adapter"]." </span></td>";} else {echo "<td width=50 valign=top> &nbsp </td>";}
        if ($data2["notes"] >t0) {echo "<td width=205 valign=top><span style='color:".$data2["color"]."'> ".$data2["notes"]." </span></td>";} else {echo "<td width=205 valign=top> &nbsp </td>";}
        echo "<td width=50 valign=top><span style='color:".$data2["color"]."'> ".$data2["color"]." </span></td>";
     echo "</tr>";
  }

Bei der zweiten abfrage erhalte ich ein error.

Danke für einen kick in die richtige Richtung

Gruss Itchy
 
Hallo,

ich kann mir schon denken wo der Fehler liegt. Bei deinem ersten while() fehlt die geschweifte Klammer auf und später halt dann entsprechend wieder zu.

Gruß
BK
 
Ich denk den Ausdruck hinter LIKE solltest du in ' setzen. Denn LIKE deutet auf String hin.
PHP:
  $sql2 = mysql_query("SELECT DISTINCT typ,bracket,adapter,notes,color
                      FROM ".compat." WHERE marke LIKE '".$data["marke"]."'");

Ansonsten darf ich dir sicher mein Tutorial zum Debuggen genau solcher Probleme ans Herz legen.
[Debug Queries

Nachtrag;
Schöner währe es mMn alle Daten sortiert auf einmal auslesen und sich die jeweilige Marke merken umd zu schauen ob du einen neuen Abschnitt hast. Gibt nur eine DB-Abfrage und ist fast sicher einiges performanter

PHP:
$sql = mysql_query("SELECT DISTINCT marke, typ,bracket,adapter,notes,color
                      FROM ".compat." ORDER BY marke");
$result = mysql_query($sql);
$aktuelleMarke = "";
while($row = mysql_fetch_assoc($result){
    if($aktuelleMarke <> $row['marke']){
        //TODO neue Marke
        $aktuelleMarke = $row['marke'];
    }
    //TODO Detail ausgeben
}
 
Zuletzt bearbeitet:
Hallo,
danke für die schnelle antwort.
der Fehler ist Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in

Tut mir leid wegen der Glaskugel.

Gruss
 
Ich denk den Ausdruck hinter LIKE solltest du in ' setzen. Denn LIKE deutet auf String hin.
PHP:
  $sql2 = mysql_query("SELECT DISTINCT typ,bracket,adapter,notes,color
                      FROM ".compat." WHERE marke LIKE '".$data["marke"]."'");

Ansonsten darf ich dir sicher mein Tutorial zum Debuggen genau solcher Probleme ans Herz legen.
PHP MySQL Debug Queries
Danke, mit
PHP:
$sql2 = mysql_query("SELECT DISTINCT typ,bracket,adapter,notes,color
                      FROM ".compat." WHERE marke LIKE '".$data["marke"]."'");

geht es, aber zählt die Marke, resp. nur eine Marke erhält Typen.
Aber so komme ich schon mal weiter.

Gruss Itchy
 
Hallo,
irgendwie funktioniert es immer noch nicht, obwohl ich mit
PHP:
error_reporting(E_ALL);
die Fehler behoben habe.

mit
PHP:
   $sql = mysql_query("SELECT DISTINCT marke FROM compat ORDER BY marke");

   while ($data = mysql_fetch_assoc($sql))

//echo "{$sql}<br />\n";
//mysql_query($sql) or die(mysql_error());


    $sql2 = mysql_query("SELECT typ,bracket,adapter,notes,color
                      FROM compat WHERE marke LIKE '".$data["marke"]."'");
                      
  while ($data2 = mysql_fetch_assoc($sql2))
  
  {

     echo "<tr>";
        echo "<td width=205 valign=top><span style='color:".$data2["color"]."'> ".$data["marke"]." </span></td>";
        echo "<td width=205 valign=top><span style='color:".$data2["color"]."'> ".$data2["typ"]." </span></td>";
        if ($data2["bracket"] !=0) {echo "<td width=50 valign=top><span style='color:".$data2["color"]."'> ".$data2["bracket"]." </span></td>";} else {echo "<td width=50 valign=top> &nbsp </td>";}
        if ($data2["adapter"] =='X') {echo "<td width=50 valign=top><span style='color:".$data2["color"]."'> ".$data2["adapter"]." </span></td>";} else {echo "<td width=50 valign=top> &nbsp </td>";}
        if ($data2["notes"] >'t0') {echo "<td width=205 valign=top><span style='color:".$data2["color"]."'> ".$data2["notes"]." </span></td>";} else {echo "<td width=205 valign=top> &nbsp </td>";}
        echo "<td width=50 valign=top><span style='color:".$data2["color"]."'> ".$data2["color"]." </span></td>";
     echo "</tr>";
  }
erhalte ich keine "marke" aber alle "typ" der letzten "marke" von "compat"

wenn ich
PHP:
echo "{$sql}<br />\n";
mysql_query($sql) or die(mysql_error());
ausführe, erhalte ich 105x Resource id #2 und
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Resource id #2' at line 1

Hat mir noch jemand einen tip?
danke im voraus

Gruss Itchy
 
Steht doch da... Fehler lesen und verstehen ;)
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Resource id #2' at line 1
Deine SQL Statements sind falsch...
Debugge deine $sqlX variablen und schau mal zum beispiel in phpadmin was da passiert.
 
wenn ich in PHPadmin die abfrage mache, erhalte ich die resultate perfekt.

Ich habe 2x die selbe abfrage und einmal geht sie nicht. das ist mir zu hoch.

Wenn ich die 2te abfrage nicht ausführe, erhalte ich auf der Seite alle marken angezeigt.

kann ich nicht aus einer DB 2mal laden?
 
Zurück