Hilfe beim "Subselect sparen"
Verfasst: 28.03.2013 23:16
Hallo Gemeinde,
ich brauch mal die Hilfe eines SQL Sachkundigen, da ich hier an die Grenze meines SQL Grundverständnisses stosse.
Knackpunkt ist das vorab als Variable
Ich habe schon vieles getestet und probiert. Alle möglichen JOIN's und so fort, find aber die Lösung nicht.
Alle von mir versuchten alternativen Abfragen bringen nicht das Ergebnis, wie es die vorliegende Abfrage bringt.
Eventuell würde ja eine Aufsplittung in 2 Abfragen helfen!? Aber auch da bin ich nicht weiter gekommen.
ich brauch mal die Hilfe eines SQL Sachkundigen, da ich hier an die Grenze meines SQL Grundverständnisses stosse.
Knackpunkt ist das vorab als Variable
$sql_arp
definierte Subselect. Es erzeugt zuviel Last.Ich habe schon vieles getestet und probiert. Alle möglichen JOIN's und so fort, find aber die Lösung nicht.
Alle von mir versuchten alternativen Abfragen bringen nicht das Ergebnis, wie es die vorliegende Abfrage bringt.
Code: Alles auswählen
// Knackpunkt
$sql_arp = "(SELECT MAX(post_time) FROM " . POSTS_TABLE . " WHERE u.user_id = poster_id)";
$sql_ary = array(
'SELECT' => "u.username AS u_name, u.user_email, $sql_arp AS posttime, u.user_type, u.user_id, u.user_posts, u.user_colour, u.user_avatar, u.user_avatar_type, u.user_avatar_width, u.user_avatar_height, u.user_lastvisit, u.test_0, u.test_1, u.test_2, p.post_subject, p.forum_id, p.post_id",
'FROM' => array(
USERS_TABLE => "u",
),
'LEFT_JOIN' => array(
array(
'FROM' => array(POSTS_TABLE => 'p'),
'ON' => "$sql_arp = p.post_time",
)
),
'WHERE' => "UNIX_TIMESTAMP( ) - $sql_arp > $days *24 *3600
AND u.user_posts != 0",
'ORDER_BY' => "$sql_arp DESC"
);
$sql = $db->sql_build_query('SELECT', $sql_ary);