Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
[MySQL 4.0] Vereinfachung der Abfrage? [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
[MySQL 4.0] Vereinfachung der Abfrage?


 
Laire
23-03-2007, 16:43 
 
Hallo,
aus einem kurzen Gespräch mit einem Sitznachbar im Zug habe ich herrausgehört, das meine MySQL abfragen wohl viel zu kompliziert mache :-(

Als Beispiel, ich habe mehrer Tabellen:

Tabelle 1 - sendung:
id = 1
titel = American Chopper
info = [longtext mit einer Beschreibung der Sendung]

Tabelle 2 - kategorien
id = 5
kat = Doku Soap

Tabelle 3 - kat_zu (Kategorie Zurodnung)
id = 1
sendung_id = 1
kat_id = 5

Tabelle 4 - sender
id = 4
name = DMAX

Tabelle 5 - sendezeiten
id = 10
sendung_id = 1
sender_id = 4
time = 01.04.2007 19:00 Uhr


So jetzt möchte ich gerne alle Informationen zusammenhängend ausgegeben haben, also rufe ich die Infos einzeln aus den Tabelle ab:


<?PHP
$abfrage = "SELECT * FROM sendung WHERE id=1";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);

$id = $row->id;
$titel = $row->titel;
$info = $row->info;

$abfrage = "SELECT * FROM kat_zu WHERE sendung_id=$id";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);

$abfrage = "SELECT * FROM kategorien WHERE id=$row->kat_id";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);

$kat = $row->kat;

$abfrage = "SELECT * FROM sendezeiten WHERE sendung_id=$id";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);

$startzeit = $row->time;
$senderid = $row->sender_id;

$abfrage = "SELECT * FROM sender WHERE id=$senderid";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);

$sender = $row->name;

?>


Geht sowas nicht einfacher?

 
ghostgambler
23-03-2007, 16:50 
 
naja, ob jetzt ein großer Join besser ist als die 4 Queries wage ich fast zu bezweifeln...

 
penizillin
23-03-2007, 16:56 
 
Original geschrieben von ghostgambler
naja, ob jetzt ein großer Join besser ist als die 4 Queries wage ich fast zu bezweifeln... wieso? ich würde das gegenteil behaupten.

 
Laire
23-03-2007, 17:02 
 
Gibt es irgendwo eine deutsche Dokumetation zu dem Join Syntax?

 
Kropff
23-03-2007, 17:07 
 
bei mir gibt es ein tutorial zu joins (http://www.peterkropff.de/site/tutorials/php_mysql_2/php_mysql_2.htm) vielleicht hilft dir das weiter.

gruß
peter

 
penizillin
23-03-2007, 17:10 
 
Original geschrieben von Laire
Gibt es irgendwo eine deutsche Dokumetation zu dem Join Syntax? im manual geschaut?

 
ghostgambler
23-03-2007, 17:15 
 
Original geschrieben von penizillin
wieso? ich würde das gegenteil behaupten.
Weil gleichzeitig 4 Tabellen abgefragt werden müssen und das Ergebnis zusammen gebracht werden muss

 
penizillin
23-03-2007, 17:24 
 
"gleichzeitig" ist so ne sache, läuft ja trotzdem sequentiell in der reihenfolge ab, die das db management für richtig befindet, und genau darin liegt das optimierungspotenzial. dazu kommt ein (zugegeben geringerer) vorteil von nur einem notwendigen prozesswechsel sowie nur einem aufruf von _query und _fetch_irgendwas funktionen.

 
Laire
23-03-2007, 17:50 
 
Original geschrieben von Kropff
bei mir gibt es ein tutorial zu joins (http://www.peterkropff.de/site/tutorials/php_mysql_2/php_mysql_2.htm) vielleicht hilft dir das weiter.

gruß
peter

Danke hat mir sehr geholfen. Sehr schöne Sache...

 
Bugbuster
23-03-2007, 18:50 
 
hallo,

da hier ja nur Indizefelder miteinander verknüpft werden denke ich das ein JOIN am Ende einen Mini-Performancevorteil hat.

und wie eben schon erwähnt nur ein prozesswechsel ...

mfg
bugbuster

 
Laire
23-03-2007, 19:14 
 
Geht mir noch nitcht einmal um die Geschwindigkeit, sonder eher um den ellen langen code...

 
closure
23-03-2007, 19:36 
 
Hi,

der join ist ganz sicher schneller, wenn er dann auch noch
wirklich nur die zu selektierenden felder angibt wirds noch
besser.

greets

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:13 Uhr.