DAtenbankabfrage - Arrays - tabellarisch ausgeben

Begonnen von haraldos, 27. April 2005, 06:48:08

Vorheriges Thema - Nächstes Thema

haraldos

Moin zusammen,
ich versuche nun meine erste Datenbankabfrage selber zu erstellen. Grundsätzlich bekomme ich die Verbindung zur Datenbank auch hin, ich kann mir auch eine beliebige Spalte anzeigen lassen und diese nach bestimmten Kriterien filtern *jippie*, klingt für die Erfahrenen von Euch vielleicht profan, für mich war es bereits ein riesen Schritt... /uploads/emoticons/icon_e_wink.gif.3167d127940f44558fbf1ccd9b6d60a9.gif\" alt=\";-)\" />
Ich weiß zwar jetzt, dass meine Abfrage in einer Spalte meiner Wahl nach dem gewünschten Begriff filtert, das ganze macht natürlich nur Sinn, wenn ich nicht nur diesen Begriff angezeigt bekomme, sondern auch zusätzliche Info´s, die an anderen Spalten zu der jeweils passenden Zeile stehen. Das ganze soll in einer Tabelle ausgegeben werden. Soweit ich mich da bisher eingelesen habe, sind Arrays der richtige Weg dafür. Aber da hängt auch schon mein Hammer: ich habe mich bereits wie ein wilder durchs Netz geklickert, meine beiden PHP Bücher gefressen, aber wie man dergleichen mit Arrays aufbaut, kapiere ich einfach (noch) nicht.
Ich möchte jetzt nicht nach einer Komplettlösung fragen, dabei lernt man nix. Aber wenn jemand nen Tipp hat, wo diese Geschichte möglichst Einsteigertauglich veranschaulicht wird und aus der man die benötigte Lösung ableiten kann, wäre ich zutiefst verbunden  /uploads/emoticons/icon_e_biggrin.gif.1a84f5257b36e14b36d04985314f877f.gif\" alt=\":-D\" />
Für den Fall, dass es von Interesse ist: die besagte Datenbank wird von anderer Stelle gefüllt, insgesamt benötige ich von allen darin enthaltenen Datensätze (ca 1200) die Informationen aus vier Spalten. Jeder Datensatz soll dann bei Ausgabe in einer Tabellenzeile stehen. Ein Primärschlüssel existiert leider nicht.
Hier die Abfrage, die ich bisher gebastelt habe:

xwg\";
  }
?>

 
Das Ergebnis dieser Abfrage gibt mir einfach nur \"BOARDSBOARDSBOARDS...\" aus, zeigt mir aber, dass es bis hierhin funktioniert.
Danke & Gruß, Haraldos
http://de.profile.xfire.com/haraldos\" rel=\"external nofollow\">http://de.miniprofile.xfire.com/bg/co/type/2/haraldos.png\" alt=\"haraldos.png\">

Powie

jo, fast alles richtig, du musst in Zeile 8 auch ein Array ausgeben:
echo $row[\'xwg\'];

haraldos

Woahh! Ich krisch die Motten. Entweder bin ich zu blöd oder die Gicht schlägt aufs Hirn...  ;-(
Ich versuche nichts weiter, als obige Abfrage tabellarisch auszugeben. Kann ja eigentlich net so schwer sein, da man´s ja x-fach im Netz sieht... Eigentlich wollt ich ja nicht nach ner Lösung fragen, jetzt tu ich´s trotzdem, in eine solche Beispieltabelle soll die Ausgabe wandern:
 



 
Zeile 2 soll sich dabei so soft widerholen wie Datensätze laut spezifischer Abfrage vorhanden sind...
http://de.profile.xfire.com/haraldos\" rel=\"external nofollow\">http://de.miniprofile.xfire.com/bg/co/type/2/haraldos.png\" alt=\"haraldos.png\">

d-day

na du hast es doch schon fast:
 


 
\" . $row[\'xwg\'] . \"\";
  }
?>

 
aber eigentlich willst du doch bestimmt einzelne zeilen, nicht spalten ausgeben, oder?
müsstest dann noch abändern.... mit in die schleife.
http://www.couro.de\" rel=\"external nofollow\">Couro do Brasil

haraldos

Hmm,
danke erstmal, habe Deinen Vorschlag so modifiziert:


\\n\".stripslashes($row[art]).\"\\n\";
  echo \"\".stripslashes($row[name]).\"\\n\";
  echo \"\".stripslashes($row[p1]).\"\\n\\n\";
  }
?>

 
Jetzt produziert er immerhin berreits eine Tabelle mit entsprechend vielen Zeilen und Spalten, so oft \"BOARDS\" in der Spalte \"xwg\" vorkommt. Allerdings sind die Tabellenzellen leer, zu überprüfen ist das lediglich im Quelltext...
\"xwg\" dient auch lediglich der Selektion einer bestimmten Produktkategorie, ausgegeben werden sollen die zu \"xwg\" passenden Werte aus \"art\", \"name\" und \"p1\". Müssen diese drei Werte nochmals speziell abgefragt werden?
http://de.profile.xfire.com/haraldos\" rel=\"external nofollow\">http://de.miniprofile.xfire.com/bg/co/type/2/haraldos.png\" alt=\"haraldos.png\">

mahe

nimm statt mysql_fetch_object() mal mysql_fetch_array() /uploads/emoticons/icon_e_wink.gif.3167d127940f44558fbf1ccd9b6d60a9.gif\" alt=\";-)\" />

http://blog.mahe.at\" rel=\"external nofollow\">http://blog.mahe.at/wp-content/uploads/2007/06/88x31_1.jpg\" alt=\"88x31_1.jpg\">


Ja, diese Signatur dient zur Werbung!


Und dass ich meine Posts wiederfinde ...


haraldos

Upps, Kommando zurück!
Fehler in Zeile 9, muss dann wohl richtigerweise so lauten:
 

while($row = mysql_fetch_array($ergebnis))

 
Aber es funktioniert *jumparound*  /uploads/emoticons/icon_e_biggrin.gif.1a84f5257b36e14b36d04985314f877f.gif\" alt=\":-D\" />/uploads/emoticons/icon_e_biggrin.gif.1a84f5257b36e14b36d04985314f877f.gif\" alt=\":-D\" />
@mahe:
auch danke! Hatte sich überschnitten, war zwischenzeitlich auch scho drauf gekommen!
http://de.profile.xfire.com/haraldos\" rel=\"external nofollow\">http://de.miniprofile.xfire.com/bg/co/type/2/haraldos.png\" alt=\"haraldos.png\">

mahe

mit fetch_object() musst du $row->art usw. schreiben, aber eine Änderung is bequemer als mehrere /uploads/emoticons/icon_e_biggrin.gif.1a84f5257b36e14b36d04985314f877f.gif\" alt=\":-D\" />

http://blog.mahe.at\" rel=\"external nofollow\">http://blog.mahe.at/wp-content/uploads/2007/06/88x31_1.jpg\" alt=\"88x31_1.jpg\">


Ja, diese Signatur dient zur Werbung!


Und dass ich meine Posts wiederfinde ...


haraldos

Sooo...
wo´s nu funktioniert noch eine allgemeine Frage zur Performance bei der Abfrage: wenn die erste Ausgabe abgeschlossen ist, kommt logischerweise die nächste Ausgabe, dann die Nächste, usw. Nur nicht mehr nach \"BOARDS\" gefiltert, sondern beispielsweise nach \"CPU\", \"RAM\", usw... Auf Anhieb würde ich das jetzt so lösen:
 

\\n\".stripslashes($row[art]).\"\\n\";
  echo \"\".stripslashes($row[name]).\"\\n\";
  echo \"\".stripslashes($row[p1]).\"\\n\\n\";
  }
$abfrage = \"SELECT xwg, art, name, p1 FROM artikel WHERE xwg LIKE \'CPU\' ORDER BY art\";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_array($ergebnis))
  {
  echo \"\\n\".stripslashes($row[art]).\"\\n\";
  echo \"\".stripslashes($row[name]).\"\\n\";
  echo \"\".stripslashes($row[p1]).\"\\n\\n\";
  }
?>

 
Das würde insgesamt ca. 15-20 mal sow weitergehen. Meinem Verständnis nach ackert der jetzt jedes mal die komplette Datenbank ab um nach dem entsprechendem Kriterium zu filtern. Lässt sich das optimieren?
BTW, der Code dient jetzt nur noch zur veranschaulichung, unnötiges Beiwerk hab ich mal gekürzt...
http://de.profile.xfire.com/haraldos\" rel=\"external nofollow\">http://de.miniprofile.xfire.com/bg/co/type/2/haraldos.png\" alt=\"haraldos.png\">

mahe

Najo, wenn die Reihenfolge nicht so die Rolle spielt (also ob jetzt CPU über Boards oder umgekehrt oder so) würd ich das in einem Query machen.
Würde einfach ORDER BY xwg, art machen.
Da wird dann zuerst nach xwg sortiert (Board, CPU, ...) und darin dann nach art.
Wenn du daeine Trennung dazwischen haben willst musst du einfach immer xwg in einer Var speichern und dann im nächsten Durchlauf mit dem aktuellenxwg vergleichen.
Wenns nicht gleich is kommt dann halt die Trennung /uploads/emoticons/icon_e_wink.gif.3167d127940f44558fbf1ccd9b6d60a9.gif\" alt=\";-)\" />

http://blog.mahe.at\" rel=\"external nofollow\">http://blog.mahe.at/wp-content/uploads/2007/06/88x31_1.jpg\" alt=\"88x31_1.jpg\">


Ja, diese Signatur dient zur Werbung!


Und dass ich meine Posts wiederfinde ...


haraldos

Reihenfolge ist in diesem Fall leider wichtig...
http://de.profile.xfire.com/haraldos\" rel=\"external nofollow\">http://de.miniprofile.xfire.com/bg/co/type/2/haraldos.png\" alt=\"haraldos.png\">

d-day

na dann wirst Du wohl ein Ordnungskriterium in der enstprechenden tabelle einfügen müssen.
1 bis n, und dann ein order by.
http://www.couro.de\" rel=\"external nofollow\">Couro do Brasil

all your base are belong to us / Discord