Mailinglisten-Archive |
Hi Liste,
ich habe folgende 2 Tabellen (etwas vereinfacht):
CREATE TABLE syst_sites (
site_id tinyint(3) unsigned NOT NULL default '0',
site_name varchar(32) NOT NULL default '',
site_url varchar(64) default NULL,
site_email varchar(64) default NULL,
PRIMARY KEY (site_id)
) TYPE=MyISAM;
CREATE TABLE cat_links (
link_id smallint(5) unsigned NOT NULL default '0',
link_site tinyint(3) unsigned NOT NULL default '0',
link_status enum('neu','genehmigt','geparkt','gesperrt') NOT NULL,
link_name varchar(64) NOT NULL default '',
link_url varchar(255) NOT NULL default '',
link_text varchar(255) NOT NULL default '',
PRIMARY KEY (link_id),
UNIQUE KEY un_link_url (link_site,link_url),
KEY fk_link_site (link_site),
KEY in_link_sitestatus (link_site,link_status)
) TYPE=MyISAM;
Ich moechte mit einem Select eine Uebersicht aller "Sites" mit der
Anzahl der Links gesamt und der Links mit Status "neu" erhalten. Mein
Select sieht so aus:
SELECT syst_sites.*,
COUNT(a_links.link_id) AS site_linkcnt,
COUNT(b_links.link_id) AS site_linkcntnew
FROM syst_sites
LEFT JOIN cat_links AS b_links
ON site_id = b_links.link_site
AND FIND_IN_SET('neu', b_links.link_status)
LEFT JOIN cat_links AS a_links
ON site_id = a_links.link_site
GROUP BY site_id
ORDER BY site_id
Das erste sonderbare Verhalten ist, dass das SELECT-Statement ueber 3
Sekunden braucht, wenn ich die Reihenfolge der LEFT JOINs vertausche,
also zuerst auf "a_links" und dann auf "b_links" abfrage. Mache ich es
so wie oben angegeben, benoetigt das SELECT-Statement nur 0,03x
Sekunden.
Das andere Problem ist, dass im Ergebnis bei "site_linkcntnew" der
gleiche Wert wie bei "site_linkcnt" steht, wenn es bei der "Site"
zumindest einen Link gibt, der den Status "neu" hat. Bei allen anderen
wird korrekterweise eine 0 ausgegeben.
Kann mir jemand einen Tipp geben, wo das Problem liegen koennte oder wo
im SELECT-Statement mein Denkfehler liegen koennte?
Danke und Gruss,
Ralf
--
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive