Autor Zpráva
V4sek
Profil *
Dobrý den, mám kod pro zobrazení všech obrázků z dané kategorie.

$sql2 = MySQL_Query("SELECT kategorie.seo_en, obrazky.nazev_en, obrazky.img, obrazky.seo_enn FROM kategorie 
LEFT JOIN kategorie_obrazky on kategorie.id = kategorie_obrazky.id_kategorie
LEFT JOIN obrazky on obrazky.id = kategorie_obrazky.id_obrazky 
WHERE kategorie.seo_en = '".$_GET["id"]."'");

if (MySQL_Num_Rows($sql2)>0){ 

define ("COLS", 2);  // počet sloupců
 
echo "<table class='ohranic'>\n";
for ($i = 0; $zaznam = mysql_fetch_assoc($sql2); $i++)
{
  if ($i % COLS == 0) echo "<tr>";
  echo "<td>";
 
  
 echo "<div style='width:225px;padding:10px;'>
       <div><img src=\"/images/obrazky/".$zaznam['img']."\" width=\"255\" height=\"255\"></div>
       <div><a href=\"/".$zaznam['seo_enn']."\">".$zaznam['nazev_en']."</a></div>
       </div>"; 
   
  
  echo"</td>";
  if ($i % COLS == COLS - 1) echo "</tr>\n";
}

echo "</table>\n";

} else { 
none('V této kategorii není žádný obrázek.');
}

Skript funguje, nicméně, když v kategorii není žádný obrázek, tak to nenapíše "V této kategorii není žádný obrázek." Ale v té kategorii je obrázek, který není načten (obrázek neexistuje).
Když dám nějakou kategorii, kde jsou obrázky tak to funguje bez problémů, načte se obrázek i název. Nevíte někdo v čem mám chybu?
Tori
Profil
V4sek:
Ale v té kategorii je obrázek, který není načten (obrázek neexistuje).
Jak může být v kategorii a přitom neexistovat?
V4sek
Profil *
obrázek neexistuje je tam pouze <img src=\"/images/obrazky/\" width=\"255\" height=\"255\">
Tori
Profil
Pokud nepotřebujete pole kategorie.seo_en (v ukázaném kódu nikde není), použijte INNER JOIN. Pokud ano, měla by stačit podmínka (pokud dotaz vrací jen jeden řádek výsledků a v něm je prázdné pole obrazky.img, tak obrázek neexistuje). V druhém případě to bude chtít nějak upravit celý cyklus.
V4sek
Profil *
Děkuji INNER JOIN to vyřešil bravůrně. Ještě bych se chtěl zeptat šlo by do mého SQL dotazu zapsat ještě jeden
$result = mysql_query("SELECT p.*, r.prumer
FROM obrazky p
LEFT JOIN (SELECT rating_id, AVG(rating_num) prumer
  FROM ratings
  GROUP BY rating_id
) r ON r.rating_id = p.id");

Vůbec nevím jak na to, lze to vůbec?
Tori
Profil
Zkuste:
SELECT o.nazev_en, o.img, o.seo_enn, IFNULL(AVG(r.rating_num), 0) prumer
FROM kategorie k
INNER JOIN kategorie_obrazky ko ON k.id = ko.id_kategorie
INNER JOIN obrazky o ON o.id = ko.id_obrazky 
LEFT JOIN ratings r ON r.rating_id = o.id
WHERE k.seo_en = '".$_GET["id"]."'
GROUP BY o.id
V případě, že nebudou žádné odpovídající záznamy v tab. ratings, bude průměr 0 (viz IFNULL).

Anebo takhle, otestujte s EXPLAINem, co je výhodnější.
SELECT o.nazev_en, o.img, o.seo_enn, IFNULL(AVG(r.rating_num), 0) prumer
FROM obrazky o
LEFT JOIN ratings r ON r.rating_id = o.id
WHERE o.id IN 
   (SELECT ko.id_obrazky
    FROM kategorie_obrazky ko 
    INNER JOIN kategorie k ON k.id = ko.id_kategorie
    WHERE k.seo_en = '".$_GET["id"]."')
GROUP BY o.id
V4sek
Profil *
Bohužel nefunguje, nezobrazuje ani hvězdičky, když je zadám ručne v databázi

$sql2 = MySQL_Query("SELECT o.nazev_en, o.img, o.seo_enn,o.id, IFNULL(AVG(r.rating_num), 0) prumer
FROM obrazky o
LEFT JOIN ratings r ON r.rating_id = o.id
WHERE o.id IN 
   (SELECT ko.id_obrazky
    FROM kategorie_obrazky ko 
    INNER JOIN kategorie k ON k.id = ko.id_kategorie
    WHERE k.id = '".$_GET["id"]."')
GROUP BY o.id");
  
if (MySQL_Num_Rows($sql2)>0){ 

define ("COLS", 2);  // počet sloupců
 
echo "<table class='ohranic'>\n";
for ($i = 0; $zaznam = mysql_fetch_assoc($sql2); $i++)
{

  if ($i % COLS == 0) echo "<tr>";
  echo "<td>";
 
  
 echo "<div style='width:225px;padding:10px;'>".$zaznam['nazev_en']."
       <div><img src=\"/images/obrazky/".$zaznam['img']."\" width=\"255\" height=\"255\"></div>
       <div><a href=\"/".$zaznam['seo_enn']."\">".$zaznam["id"]."".pullRating("".$zaznam["id"]."",false,false,false)."</a></div>
       </div>"; 
   
    
  echo"</td>";
  if ($i % COLS == COLS - 1) echo "</tr>\n";

}

echo "</table>\n";

} else { 
none('V této kategorii není žádný obrázek.');
}

Schvalně jsem to převedl z seo_en na id, protože pak bude určitě stím bordel.
Tori
Profil
A když ten samotný dotaz spustíte v PhpMyAdmin (s nějakým existujícím ID), hlásí nějakou chybu? A ten druhý dotaz taky nejde?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: