17. februar 2002 - 16:34Der er
58 kommentarer og 1 løsning
Optimering af udtræk
Hej
Jeg har dette udtræk, hvor jeg bedst kan forestille mig at det kan optimeres. Det drejer sig om $query2, hvor jeg jeg et database kald inde i en while løkke...
Kan nogen hjælpe?
*****
<? include ("inc/security.php"); include ("inc/dbconnect.inc"); include ("inc/class.FastTemplate.php");
session_start();
$title = "Courses";
$tpl = new FastTemplate("."); $tpl ->define(array("template" => "courses.htm")); $tpl->define_dynamic("courses","template");
$query = mysql_query("SELECT course_id, course_name, course_description FROM courses") or die ($query."<br>".mysql_error());
while ($row = mysql_fetch_array($query))
{ $course_id = $row["course_id"];
$query2 = mysql_query("SELECT course_id FROM course_subscriptions WHERE user_id='$SESSION_ID' AND course_id='$course_id'") or die ($query."<br>".mysql_error());
select course_id, course_name, course_description from courses,course_subscriptions where courses.course_id=course_subsriptions.course_id and user_id='$SESSION_ID'
Nu har jeg ændret lidt i det og det ser ud til at virke bortset fra at der kun trækker course_id 2 ud og ikke 1 (eller kun viser 2'eren)
***
<? include ("inc/security.php"); include ("inc/dbconnect.inc"); include ("inc/class.FastTemplate.php");
session_start();
$title = "Courses";
$tpl = new FastTemplate("."); $tpl ->define(array("template" => "courses.htm")); $tpl->define_dynamic("courses","template");
$query = mysql_query("SELECT courses.course_id, courses.course_name, courses.course_description, count(course_subscriptions.course_id) as subscribed FROM courses LEFT JOIN course_subscriptions USING(course_id) GROUP BY course_subscriptions.course_id") or die ($query."<br>".mysql_error());
while ($row = mysql_fetch_array($query)) { if ($row['subscribed'] == '1') { $subscribe_action = 'course_unsubscribe.php?course_id='.$row["course_id"]; $subscribe_action_type = "Unsubscribe"; } else if ($row['subscribed'] == 0) { $subscribe_action = 'course_subscribe.php?course_id='.$row["course_id"]; $subscribe_action_type = "Subscribe"; }
<? include ("inc/security.php"); include ("inc/dbconnect.inc"); include ("inc/class.FastTemplate.php");
session_start();
$title = "Courses";
$tpl = new FastTemplate("."); $tpl ->define(array("template" => "courses.htm")); $tpl->define_dynamic("courses","template");
$query = mysql_query("SELECT courses.course_id, courses.course_name, courses.course_description, count(course_subscriptions.course_id) as subscribed FROM courses LEFT JOIN course_subscriptions USING(course_id) GROUP BY course_subscriptions.course_id") or die ($query."<br>".mysql_error());
while ($row = mysql_fetch_array($query)) { if ($row['subscribed'] == '1') { $subscribe_action = 'course_unsubscribe.php?course_id='.$row["course_id"]; $subscribe_action_type = "Unsubscribe"; } else if ($row['subscribed'] == 0) { $subscribe_action = 'course_subscribe.php?course_id='.$row["course_id"]; $subscribe_action_type = "Subscribe"; }
Prøv evt. at udskrive indholdet af $row arrayet, så vi kan se alt hvad det indeholder nu - jeg har måttet gætte lidt nogle steder, da jeg ikke havde nogle db'er at prøve på!
<? include ("inc/security.php"); include ("inc/dbconnect.inc"); include ("inc/class.FastTemplate.php");
session_start();
$title = "Courses";
$tpl = new FastTemplate("."); $tpl ->define(array("template" => "courses.htm")); $tpl->define_dynamic("courses","template");
$query = mysql_query("SELECT courses.course_id, courses.course_name, courses.course_description, count(course_subscriptions.course_id) as subscribed FROM courses LEFT JOIN course_subscriptions USING(course_id) GROUP BY course_subscriptions.course_id") or die ($query."<br>".mysql_error());
while ($row = mysql_fetch_array($query)) { if ($row['subscribed'] == '1') { $subscribe_action = 'course_unsubscribe.php?course_id='.$row["course_id"]; $subscribe_action_type = "Unsubscribe"; } else if ($row['subscribed'] == 0) { $subscribe_action = 'course_subscribe.php?course_id='.$row["course_id"]; $subscribe_action_type = "Subscribe"; }
SELECT courses.course_id, courses.course_name, courses.course_description, count(course_subscriptions.course_id) as subscribed FROM courses LEFT JOIN course_subscriptions USING(course_id) GROUP BY course_subscriptions.course_id ORDER BY courses.course_id
<? include ("inc/security.php"); include ("inc/dbconnect.inc"); include ("inc/class.FastTemplate.php");
session_start();
$title = "Courses";
$tpl = new FastTemplate("."); $tpl ->define(array("template" => "courses.htm")); $tpl->define_dynamic("courses","template");
$query = mysql_query("SELECT courses.course_id, courses.course_name, courses.course_description, count(course_subscriptions.course_id) as subscribed FROM courses LEFT JOIN course_subscriptions USING(course_id) GROUP BY course_subscriptions.course_id ORDER BY courses.course_id") or die ($query."<br>".mysql_error());
while ($row = mysql_fetch_array($query)) { if ($row['subscribed'] == '1') { $subscribe_action = 'course_unsubscribe.php?course_id='.$row["course_id"]; $subscribe_action_type = "Unsubscribe"; } else if ($row['subscribed'] == 0) { $subscribe_action = 'course_subscribe.php?course_id='.$row["course_id"]; $subscribe_action_type = "Subscribe"; }
prøv evt. at kontrollere indholdet i dine tabeller - jeg har lige kørt på et tilsvarende testmateriale, hvor det fungerede!!
NB: Prøv lige at lave en echo $row['subscribed']; og en echo $row["subscribed"] lige efter din while - jeg ved ikke om det kan være de enkelte anførselstegn der fucker det op!
<? include ("inc/security.php"); include ("inc/dbconnect.inc"); include ("inc/class.FastTemplate.php");
session_start();
$title = "Courses";
$tpl = new FastTemplate("."); $tpl ->define(array("template" => "courses.htm")); $tpl->define_dynamic("courses","template");
$query = mysql_query("SELECT courses.course_id, courses.course_name, courses.course_description, count(course_subscriptions.course_id) as subscribed FROM courses LEFT JOIN course_subscriptions USING(course_id) GROUP BY course_subscriptions.course_id ORDER BY courses.course_id") or die ($query."<br>".mysql_error());
while ($row = mysql_fetch_array($query)) { if ($row['subscribed'] == '1') { $subscribe_action = 'course_unsubscribe.php?course_id='.$row["course_id"]; $subscribe_action_type = "Unsubscribe"; } else if ($row['subscribed'] == '0') { $subscribe_action = 'course_subscribe.php?course_id='.$row["course_id"]; $subscribe_action_type = "Subscribe"; }
Nu giver jeg efterhånden lidt op - det er svært, når man ikke selv sidder med tabellerne og koden og kan lave konstruktiv fejlsøgning.
1. Udskriv resultatet fra sql-forespørgslen - således at du er sikker på, at du problemet ikke ligger i sql'en 2. Hvis fejlen ligger i sql'en kan du læse s. 418-419 i mysql-manualen om join-udtræk. 3. Hvis udtrækket er korrekt, kan jeg ikke umiddelbart gennemskue, hvad det er der kikser i if-sætningerne - måske skal det være 0 og 1 i stedet for '0' og '1'....
$query = mysql_query("SELECT courses.course_id, courses.course_name, courses.course_description, count(course_subscriptions.course_id) as subscribed FROM courses LEFT JOIN course_subscriptions ON courses.course_id=course_subscriptions.course_id GROUP BY courses.course_id ORDER BY courses.course_id") or die ($query."<br>".mysql_error());
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.