Yii Framework Forum: Der Guide mal wieder - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Der Guide mal wieder nur eine kleine Verständnisfrage Rate Topic: -----

#1 User is offline   sebi 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 65
  • Joined: 06-October 08

Posted 31 July 2009 - 01:20 PM

Huhu,

ich hoffe ich nerve hier niemandem mit meinem gefrage ...

also zur sache:



Seit Version 1.0.2 können sie auch erzwingen, dass die relationale Abfrage mit genau einer SQL Abfrage durchgeführt wird. Fügen Sie einfach einen together()-Aufruf nach with() an, z.B.

$posts=Post::model()->with(
'author.profile',
'author.posts',
'categories')->together()->findAll();

Die obige Abfrage wird über eine einzelne SQL-Abfrage ausgeführt. Ohne den Aufruf von together würden zwei SQL Abfragen benötigt werden: eine, für den Verbund der Tabellen Post, User und Profile und eine, die die Tabellen User und Post verbindet.



kann mir wer erklären warum die together methode nur eine einzige Abfrage braucht?
Hat es irgendwelche nachteile?

Danke sehr :)

Lg
0

#2 User is offline   Ascomae 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 49
  • Joined: 01-January 09
  • Location:Germany

Posted 02 August 2009 - 05:49 AM

View Postsebi, on 31 July 2009 - 01:20 PM, said:

Huhu,

ich hoffe ich nerve hier niemandem mit meinem gefrage ...

also zur sache:



Seit Version 1.0.2 können sie auch erzwingen, dass die relationale Abfrage mit genau einer SQL Abfrage durchgeführt wird. Fügen Sie einfach einen together()-Aufruf nach with() an, z.B.

$posts=Post::model()->with(
'author.profile',
'author.posts',
'categories')->together()->findAll();

Die obige Abfrage wird über eine einzelne SQL-Abfrage ausgeführt. Ohne den Aufruf von together würden zwei SQL Abfragen benötigt werden: eine, für den Verbund der Tabellen Post, User und Profile und eine, die die Tabellen User und Post verbindet.



kann mir wer erklären warum die together methode nur eine einzige Abfrage braucht?
Hat es irgendwelche nachteile?

Danke sehr :)

Lg



Ins blaue geraten:

Mit dem "together" wird ein JOIN über mehrere Tabellen gesetzt. Das heisst, das ein Kreuzprodukt aus der Anzahl der einzelnen Ergebnisse erstellt wird. Etwas weniger mathematisch: Die Beziehungen werden in der Datanbank geladen. Dies führt zu deutlich mehr Ergebniszeilen, als die einzelabfragen. Ist schneller, aber braucht mehr Speicher in der Datenbank. Soll heissen, bei sehr großen Tabellen finger davon lassen.

Aber wie gesagt. Das ist ins blaue geraten.


Christian
0

#3 User is offline   Dave 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 187
  • Joined: 09-October 08

Posted 05 August 2009 - 03:58 AM

Alles in einem Select abzufrühstücken ist schneller als wenn man Ping Pong zwischen PHP und Datenbank spielt.

EIn join sähe zb so aus

SELECT * FROM author a LEFT JOIN profile p ON a.id = p.author_id




Das mit den sehr großen Tabellen und "Finger davon lassen" stimmt nicht. Gerade bei großen Tabellen ist es sinnvoller das über mysql zu machen als alles an php zu schieben. Das Einzige worauf man bei Joins achten sollte, ist das man über indizierte Spalten die joins macht. Andersfalls kann es sehr sehr langsam werden. Bei yii ist das aber keine Problem, da er nur joins über FKs oder PKs macht, die immer mit einem Index versehen sind.

Beim einem select liesst die Datenbank nicht alle Inhalte, sondern schaut sich nur die Dinge in der "WHERE" Clause an. Beim "fetchen", also beim Ausgeben der Resultate werden natürlich alle geforderten Spalten ausgeben und wenn diese z.b BLOBs enthalten kann es auch mal länger dauern. Aber darum kommt so oder so nicht drum rum, ob man joins benutzt oder nicht.
0

#4 User is offline   sebi 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 65
  • Joined: 06-October 08

Posted 05 August 2009 - 06:47 AM

Oki Danke für die Erklärung :)
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users