Subselect vs. verschatelte while Schleife

ne0hype

Erfahrenes Mitglied
Hallo Leute,

ich hab folgende Frage.

Ich hab hier ein etwas komplexes MySQL Statemant mit einem Subselect, das mir genau meine Daten aus der Datenbank holt die ich brauche.

Code:
SELECT
  *
FROM
  tsas_kursangebote r
JOIN
  (SELECT
  s.group_id, t.course_info, t.show_month, t.course_extends_info
FROM
  tsas_kursangebote_group t
LEFT JOIN
  tsas_kursangebote_extends s
ON
  s.now_stufen_id = t.stufen_id
where
  t.stufen_id = '1' and (CURDATE() < s.expiry_date OR s.expiry_date IS NULL)
group by
  s.group_id) as u
ON
  r.group_id = u.group_id
ORDER by
  r.start_date ASC, r.weekday ASC

Nun wollte ich fragen ob es Performance mäßig besser oder schlechter ist anstatt des Subselects nicht doch eine while Schleife zu machen, die mir erst alle Daten welche auch der Subselecht holt, und dann nochmal eine SQL-Abfrage die mir dann die endgültigen Daten gibt zu programmieren. Also z.b.

PHP:
$result = mysql_query("SELECT
  s.group_id, t.course_info, t.show_month, t.course_extends_info
FROM
  tsas_kursangebote_group t
LEFT JOIN
  tsas_kursangebote_extends s
ON
  s.now_stufen_id = t.stufen_id
where
  t.stufen_id = '1' and (CURDATE() < s.expiry_date OR s.expiry_date IS NULL)
group by
  s.group_id");

while($row = mysql_fetch_assoc($result)){
	$result2 = mysql_query("SELECT * FROM tsas_kursangebote t where group_id='".$row['group_id']."'");
	while($row2 = mysql_fetch_assoc($result2)){
		//** meine daten **/
	}
}


Schonmal Danke für eure Antworten
 
Zuletzt bearbeitet:
Ich find so pauschal kannst das nicht sagen.
Kommt auch darauf an, wie die Datenbankstruktur ist, welche Indexes gesetzt sind ...

Ich frag mich nur wieso du die komplizierte Subquery Anweisung nimmst, würds nicht reichen die 3 Tabellen zusammenzujoinen?
So ungefähr, oder überseh ich was?
SQL:
SELECT *
FROM tsas_kursangebote r
JOIN tsas_kursangebote_extends s on s.groupid = r.groupid
join tsas_kursangebote_group t on s.now_stufen_id = t.stufen_id
where t.stufen_id = '1'
and (CURDATE() < s.expiry_date OR s.expiry_date IS NULL)
ORDER by r.start_date ASC, r.weekday ASC
 
Zurück