$qrysql = "SELECT * FROM ";
$qrysql .= "(SELECT b.iCategory, b.sBannerfile, b.sType, b.sLink, b.sBannername, b.id as bid, c.id, c.sCategory, b.dStartdate, b.dEnddate, b.iWidth, b.iHeight, b.iPriority ";
$qrysql .= "FROM #__fl_banners b LEFT JOIN #__fl_banners_categories c ON (b.iCategory = c.id) ";
$qrysql .= "WHERE b.iPublished = 1 ";
$qrysql .= "AND b.dStartdate <= '".date("Y-m-d")."' ";
$qrysql .= "AND b.dEnddate >= '".date("Y-m-d")."' ";
$qrysql .= "AND (b.iImpressions < b.iMaxImpressions OR b.iMaxImpressions = 0) ";
/*Ser till så bannrarna tillhör rätt grupper.*/
if($params->groups != "") {
$groups = explode(";", $params->groups);
$qrysql .= "AND (";
$i = 0;
foreach($groups as $group) {
if($i != 0) {
$qrysql .= " OR ";
}
$qrysql .= "c.sCategory = '".$group."'";
$i = 1;
}
$qrysql .= ") ";
}
$qrysql .= "ORDER BY RAND(NOW()) ";
$qrysql .= "LIMIT 0, ".$limit.") as a ";
/*Kollar om någon extra sortering är satt*/
$sortsql .= $sortorder1 != "" ? "a.".$sortorder1 : "";
if($sortorder2 != "") {
if($sortorder1 != "") {
$sortsql .= ", ";
}
$sortsql .= "a.".$sortorder2;
}
$qrysql .= $sortsql != "" ? "ORDER BY ".$sortsql." " : "";
$params->groups är en sträng som kan se ut så här: "grupp1;grupp2;grupp3", den ser till så bara rätt grupper visas. Allting fungerar perfekt, den slumpar ut rätt antal jag vill ha etc. Det handlar om bannrar btw :)
Nu har jag en variabel som heter $limit där man kan styra hur många som ska visas. Mitt problem är att jag vill göra om detta så att jag kan styra exakt hur många från grupp1, grupp2 och grupp3 som kan visas. Bannrarna måste ju fortfarande slumpas fram.
Variabeln $params->groups tänkte jag ändra så den ser ut så här: "grupp1|1;grupp2|2;grupp3|1" t.ex.
Då ska 1 banner från grupp1 tas fram, 2 bannrar från grupp2, och 1 banner från grupp3.
Går detta att göra direkt i SQL frågan? Eller måste jag göra tre separata SQL frågor för varje grupp?
SELECT * FROM
(SELECT b.iCategory, b.sBannerfile, b.sType, b.sLink, b.sBannername, b.id as bid, c.id, c.sCategory, b.dStartdate, b.dEnddate, b.iWidth, b.iHeight, b.iPriority
FROM #__fl_banners b LEFT JOIN #__fl_banners_categories c ON (b.iCategory = c.id)
WHERE b.iPublished = 1
AND b.dStartdate <= '2008-05-23'
AND b.dEnddate >= '2008-05-23'
AND (b.iImpressions < b.iMaxImpressions OR b.iMaxImpressions = 0)
AND (c.sCategory = 'Guld' OR c.sCategory = 'Silver' OR c.sCategory = 'Brons')
ORDER BY RAND(NOW()) LIMIT 0, 4) as a
ORDER BY a.iHeight DESC, a.iPriority ASC
258 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849