Philipp Hasenfratz: verschiedene Rabattgruppen im Online-Shop

Beitrag lesen

Halihallo

kurz vor dem erholsamen Schlaf...

Juhuiiii, jetzt bin ich gerettet:
http://www.cs.ait.ac.th/laboratory/database/manual/manual_MySQL_Optimization.shtml

"All constant tables are read first, before any other tables in the query. A constant table is:

  • A table that is used with a WHERE clause on a UNIQUE index, or a PRIMARY KEY, where all index parts are used with constant expressions and the index parts are defined as NOT NULL."

Naja, auch wenn ich das nicht wirklich verstehe, Glückwunsch zum moralischen Erfolg!

Sagt etwa über die Reihenfolge aus, in welcher die Tabellen miteinander verknüft werden (also das Kreuzprodukt der Tabellen in einer temporären Tabelle gebildet wird):
Wenn man etwa folgendes hat:

SELECT * FROM a, b WHERE a.primary=1 AND b.whatever='hello'

und die Spalte primary der Tabelle a UNIQUE ist bzw. der Primarykey, dann wird zuerst diese Tabelle eingelesen. Und da dann a.primary=1 logischerweise (eben wegen Primary oder UNIQUE) nur einen Record matched, wird das Kreuzprodukt viel, viel kleiner (also nicht die von Sven genannte 100*100*100... - Problematik). Das Kreuzprodukt hat dann nämlich nicht count(a.*) * count(b.*) Datensätze, sondern nur 1 * count(b.*)... Somit gibt das dann genau das selbe Ergebnis, wie Sven mit den Joins erreicht. Hoffe, dass ich das richtig und einigermassen verständlich forumieren konnte.

getArticles

foreach (@articles) {   # für jeden Artikel in der Session mach...
   - $tmp = neue Instanz von Artikel...
   - die Instanz in ein Array packen...
}
return InstanceArray;   # das "InstanzenArray" zurückgeben

Ich verstehe das nicht. Wie kann ich einen Array mit instanzen erstellen?

Eine Instanz ist ja nichts anderes als ein Wert... Diese kann ganz wie gehabt an ein Array gepushed werden... Da wird wohl auch mit PHP funktionieren. Also: Für jeden Artikel erstellst du eine entsprechende Artikel-Klassen-Instanz (z. B. $article = neu Artikel). Den Wert von $article fügst du ganz normal (wie eine Zahl, oder eine Variable) an das Array an und gibst dieses Zurück. Im Hauptprogramm kannst du das Array dann auslesen und z. B. über jedes Arrayelement (was ja einer Instanz der Artikel-Klasse entspricht) iterieren...

Ich hatte mal folgendes versucht(in der Warenkorb-Klasse):

// einfach den Warenkorb-Array aus der Session ausgeben
function artikel(){
  return $_SESSION["warenkorb"];
}
$artikels = $wb -> artikel;
  echo "Artikel1: ".var_dump($artikels);

Da kommt aber nx an : NULL!

ist die Funktion artikel denn in der Klasse definiert (sorry, dumme Frage)? (im Beispiel ist ja kein class drumm herum, deshalb die Frage). Also, wenn die Funktion in der Klasse für $wb definiert ist, sollte das meines Erachtens schon funktionieren.

Kurze Statusfrage: Hier hast du ja keine Artikelklasse verwendet. Ist das nur ein Test, ob die Basis funktioniert? - Wenn du die Artikelklasse implementieren willst, musst ja für jedes Arrayelement von $_SESSION["warenkorb"] eine eigenständige Instanz der Artikel-Klasse erstellen und das Array aller erstellen Instanzen zurückgeben.

Viele Grüsse

Philipp