Hallo, Ilja,
also her damit udn dann kann dir auch geholfen werden...
Die Zeit des Seitenaufbaus zähle ich vom Beginn des Programmaufrufs bis zur vorletzten HTML-Ausgabe, die letzte Zeile ist dann die Zeitanzeige.
Es differiert etwas von Aufruf zu Aufruf, obwohl remso allein auf dem Server ist (Serverhousing, Debian-Linux, 1 Switchport 100MBit).
Hier die benötigten *Felder und die Keys:
CREATE TABLE bia\_termine
(
*id
int(11) NOT NULL auto_increment,
*owner\_id
int(11) NOT NULL default '0',
*intern\_kz
int(1) NOT NULL default '0',
*veranstalter\_id
int(11) NOT NULL default '0',
*ort\_id
int(11) NOT NULL default '0',
*tag
date NOT NULL default '2001-01-01',
*titel
varchar(50) collate utf8_unicode_ci default NULL,
*zeit\_neu
int(11) default NULL,
PRIMARY KEY (id
)
)
CREATE TABLE bia\_orte
(
*id
int(11) NOT NULL auto_increment,
*name
varchar(50) collate utf8_unicode_ci NOT NULL,
*plz
varchar(10) collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (id
),
KEY plz
(plz
)
)
Meine jetzige, zeitlich akzeptable Lösung (0.3 sec für die ganze Seite) hat zwei SQLs:
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DIE LETZTEN 10 NEUERFASSUNGEN
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SELECT
max(trm1.zeit_neu) letzte_eingabe
FROM bia_termine trm1
WHERE trm1.owner_id = 1
AND trm1.veranstalter_id > 0
AND trm1.intern_kz = 0
GROUP BY trm1.veranstalter_id
ORDER BY max(trm1.zeit_neu) DESC
LIMIT 0,10
$letzte_10 = '';
while ( $row_letzte_10_neu = mysql_fetch_array( $res_letzte_10_neu ))
{
$letzte_10 .= $row_letzte_10_neu['letzte_eingabe'].',';
}
$letzte_10 .= '0'; // wg. Komma
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DATEN ZU DEN LETZTEN 10 NEUERFASSUNGEN
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SELECT
trm1.id trm_id
,trm1.titel trm_titel
,trm1.tag trm_tag
#trm1.uhr trm_uhr
#trm1.zeit_neu trm_zeit_neu
#ort1.id ort_id
,ort1.plz ort_plz
,ort1.name ort_name
FROM bia_termine trm1
LEFT JOIN bia_orte ort1
ON ort1.id = trm1.ort_id
WHERE trm1.zeit_neu IN (1238673496,1238593540,1238589841,1238571267,1238539977,1238534205,1238483656,1238410565,1238347082,1238321964,0)
ORDER BY trm1.zeit_neu DESC
Das erste SQL hatte ich testweise als Subquery in das zweite eingesetzt. Da kam eine Fehlermeldung, die GROUP, ORDER oder LIMIT (weiss nicht mehr so genau) im Subquery nicht mochte.
Und hier zum Vergleich das alte SQL (heute morgen 7.5 sec Seitenaufbau):
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DIE LETZTEN 10 NEUERFASSUNGEN
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SELECT
trm1.id trm_id
,trm1.titel trm_titel
,trm1.tag trm_tag
,trm1.uhr trm_uhr
,trm1.zeit_neu trm_zeit_neu
,ort1.id ort_id
,ort1.plz ort_plz
,ort1.name ort_name
FROM ( bia_termine trm1
,bia_orte ort1)
LEFT JOIN (bia_adressen adr1)
ON (adr1.id = trm1.veranstalter_id)
WHERE trm1.owner_id = 1
AND trm1.intern_kz = 0
AND ort1.id = trm1.ort_id
AND trm1.zeit_neu =
(
SELECT
max( trm2.zeit_neu )
FROM bia_termine trm2
WHERE trm2.veranstalter_id = trm1.veranstalter_id
)
ORDER BY trm1.zeit_neu DESC
LIMIT 0,10
Merkwürdig ist die Zeit von 0.0001 sec, wenn ich das alte SQL im phpMyAdmin laufen lasse.
Gruß, Kalle