Archiv verlassen und diese Seite im Standarddesign anzeigen : SQL-Query.......gehts besser ?
Eventuell ist ja jemand besser in Sachen Mysql und kann mir sagen, ob es eine bessere Methode gibt, um aus 1 Tabelle alle Datensätze und aus 3 weiteren Tabellen eventuelle Übereinstimmungen auszulesen
In der 1. Tabelle stehen alle Datensätze, die 2-4 Tabelle kann für jeden Datensatz zutreffen, ist das der Fall, werden zusätzliche Funktionen aktiviert.
Wies sieht es also aus....läßt sich diese Query noch verbessern ?
$sql1 = sql_query("SELECT
paidmails.*,
gebucht.k_code AS mail_gebucht,
black.k_code AS mail_black,
reload.k_reload AS mail_reload_reload
FROM " . $prefix . _DB_TABLE_PWC_PM . " AS paidmails
LEFT JOIN " . $prefix . _DB_TABLE_PWC_PM_GEBUCHT . " AS gebucht
ON (paidmails.k_code = gebucht.k_code)
LEFT JOIN " . $prefix . _DB_TABLE_PWC_PM_BLACKLISTE . " AS black
ON (paidmails.k_code = black.k_code)
LEFT JOIN " . $prefix . _DB_TABLE_PWC_PM_RELOAD . " AS reload
ON (paidmails.k_code = reload.k_code)
WHERE paidmails.k_sponsor = 12
AND paidmails.k_art = $k_art
ORDER BY paidmails.k_ver DESC
");
Wie schaut es mit der Indizierung der Tabellen aus? Sind die dort entsprechend gesetzt?
Gruß
Gremlin
Wie schaut es mit der Indizierung der Tabellen aus? Sind die dort entsprechend gesetzt?
Gruß
Gremlin
Hab ich vergessen zu erwähnen ;)
Jede Tabelle besitzt ein Feld "k_code" welches Unique ist, der Wert für "k_code" kommt also immer nur 1 x pro Tabelle vor, wobei 1 "k_code" auch in jeder Tabelle vorkommen kann ;)
Benutzer1699
11.05.2008, 00:54
Ach ja, hier wollte ich ja auch mal meinen Senf zu geben, hoffentlich schmeckts - gibt nachher auch Bratwürstchen dazu :D
Folgenden Code einfach mal in einem Query-Browser (mysql,phpMyAdmin...) ausführen.
EXPLAIN
SELECT
paidmails.*,
gebucht.k_code AS mail_gebucht,
black.k_code AS mail_black,
reload.k_reload AS mail_reload_reload
FROM " . $prefix . _DB_TABLE_PWC_PM . " AS paidmails
LEFT JOIN " . $prefix . _DB_TABLE_PWC_PM_GEBUCHT . " AS gebucht
ON (paidmails.k_code = gebucht.k_code)
LEFT JOIN " . $prefix . _DB_TABLE_PWC_PM_BLACKLISTE . " AS black
ON (paidmails.k_code = black.k_code)
LEFT JOIN " . $prefix . _DB_TABLE_PWC_PM_RELOAD . " AS reload
ON (paidmails.k_code = reload.k_code)
WHERE paidmails.k_sponsor = 12
AND paidmails.k_art = $k_art
ORDER BY paidmails.k_ver DESC
Mehr dazu (http://dev.mysql.com/doc/refman/5.1/de/explain.html)
MySQL 5.1.5......das ganze muss leider auch auf v4.3xx oder höher laufen ;)
Benutzer1699
11.05.2008, 06:20
hehe, natürlich geht das auch unter MySQL 4.1 (http://dev.mysql.com/doc/refman/4.1/en/explain.html).
MySQL 4.3? Hab ich bislang nichts von gehört, oder meinst du PHP 4.3.x?
Explain hat mit PHP nichts zu tun und hilft dir lediglich den Query zu analysieren.
Notfalls kannst du die Datenbank lokal in einer Umgebung mit den entsprechenden Versionen testen, sollte aber nicht notwendig sein, da EXPLAIN ja mit 4.1 funktioniert.
hehe, natürlich geht das auch unter MySQL 4.1 (http://dev.mysql.com/doc/refman/4.1/en/explain.html).
MySQL 4.3? Hab ich bislang nichts von gehört, oder meinst du PHP 4.3.x?
Explain hat mit PHP nichts zu tun und hilft dir lediglich den Query zu analysieren.
Notfalls kannst du die Datenbank lokal in einer Umgebung mit den entsprechenden Versionen testen, sollte aber nicht notwendig sein, da EXPLAIN ja mit 4.1 funktioniert.
Funktioniert nur mit left/right/inner/outer join nicht ;)
Das ganze wird aber gerade als Klasse umgebaut, das spart mir bei (inzwischen 34 Netzwerken) ca 1 MB Code :)
Benutzer1699
11.06.2008, 04:01
mist :D
Aber Glückwunsch, dass du eine Lösung gefunden hast.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.