Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyswietlanie komentarzy artykulow
Forum PHP.pl > Forum > Bazy danych > MySQL
graf
Wiatm,

druga moja prosba o pomoc:

Mam skrypt ktory wyswietla 5 najnowszych artykulow do ktorych dodano komentarz.
W ponizszym skrypcie niestety jeden artykul pojawia sie tyle razy ile dodano nowych komentarzy.
Jesli dodano nowych 10 komentarzy do jednego artykulu - wtedy liste zapelnia jeden artykul w 5 pozycjach sad.gif

  1. <?
  2.  
  3.  
  4. if($_SESSION['lang'] == 'pl' or !isset($_SESSION['lang']))
  5.  {
  6. $art_kategorie = "art";
  7.  }
  8. else
  9.  {
  10. $art_kategorie = "";
  11.  }
  12. $q = mysql_query("SELECT * FROM komentarze WHERE gdzie='".$art_kategorie."' AND par!='mod' ORDER BY data DESC LIMIT 5");
  13.  
  14. echo "<ul type='square'>";
  15. while($row = mysql_fetch_array($q))
  16.  {
  17.  
  18.  echo ""; if($row['par'] == 'mod') { echo "";
  19. }
  20.  
  21.  if($row['gdzie'] == 'art')
  22. {
  23. $art = mysql_query("SELECT id, tytul FROM artykuly WHERE id='$row[id_s]' AND par='' LIMIT 1");
  24. $art = mysql_fetch_row($art);
  25.  echo "<tr><td style='font-family: Verdana; font-size: 11px; color: black;'><a href='art.php?id=$art[0]'><P style='margin-left:20px; margin-top:5px;'>";
  26. if(strlen($row[tresc]) <= '40') { echo stripslashes("$row[tresc]"); }
  27. else { echo stripslashes(substr("$row[tresc]", 0, 40))."..."; }
  28. echo "</a></td></tr>";
  29.  
  30. //if(strlen($art[1]) <= '20') { echo stripslashes("$art[1]"); }
  31.  // else { echo stripslashes(substr("$art[1]", 0, 20))."..."; }
  32.  
  33. echo "<tr><td style='font-family: Verdana; font-size: 11px; color: black;'> <P style='margin-left:20px; margin-top:0px;'><a href='art.php?id=$art[0]' /><font style='color: black;'><strong>Artykuł: </strong>$art[1]</font></a> <a href='art.php?id=$art[0]'><font style='color: gray'>[".mysql_num_rows(mysql_query("SELECT id_s, gdzie FROM komentarze WHERE gdzie='art' AND id_s='$art[0]' AND par=''"))."] [...]</font></a>";
  34. }
  35.  elseif($row['gdzie'] == 'galeria')
  36. {
  37. $art = mysql_query("SELECT id, tytul FROM galeria WHERE id='$row[id_s]' AND par='' LIMIT 1");
  38. $art = mysql_fetch_row($art);
  39. echo "<a href='temp_.php?page=galeria&galeria=".$art['0']."' target='_blank'>".$art['1']."</a>";
  40. }
  41. elseif($row['gdzie'] == 'turystyka_miasta')
  42. {
  43. $art = mysql_query("SELECT id, nazwa FROM turystyka_miasta WHERE id='$row[id_s]' AND par='' LIMIT 1");
  44. $art = mysql_fetch_row($art);
  45. echo "Turystyka-miasta: <a href='art_turystyka.php?id=$art[0]' target='_blank'>$art[1]</a></a>";
  46. }
  47.  elseif($row['gdzie'] == 'pb')
  48. {
  49.  
  50. $art = mysql_fetch_assoc(mysql_query("SELECT * FROM `pb_firmy` WHERE `id`='".$row['id_s']."' AND par=''"));
  51. echo "<a href='temp_.php?page=katalog_firm&show_comp=".$row['id_s']."'>".$art['nazwa']."</a>";
  52. }
  53. echo "</td></tr><tr><td style='border-left-width: 1px; border-right-width: 1px; border-top: 1px solid #000000; border-bottom-width: 1px;'></td></tr>";
  54. }
  55.  
  56.  
  57.  
  58. echo '</ul>';
  59.  
  60.  
  61.  
  62.  
  63. ?>


Dodalem wiec GROUP BY id_s HAVING:
  1. <?
  2.  
  3.  
  4. if($_SESSION['lang'] == 'pl' or !isset($_SESSION['lang']))
  5.  {
  6. $art_kategorie = "art";
  7.  }
  8. else
  9.  {
  10. $art_kategorie = "";
  11.  }
  12. $q = mysql_query("SELECT id, tresc, gdzie, par, id_s, data FROM komentarze GROUP BY id_s HAVI
    NG gdzie='"
    .$art_kategorie."' AND par!='mod' ORDER BY data DESC LIMIT 10");
  13.  
  14. echo "<ul type='square'>";
  15. while($row = mysql_fetch_array($q))
  16.  {
  17. // echo "<tr><td style='font-family: Verdana; font-size: 11px; color: black;'><a href='art.php?id=$art[0]'><P style='margin-left:20px; margin-top:5px;'>";
  18. // if(strlen($row[tresc]) <= '40') { echo stripslashes("$row[tresc]"); }
  19. // else { echo stripslashes(substr("$row[tresc]", 0, 40))."..."; }
  20. // echo "</a></td></tr>";
  21.  echo ""; if($row['par'] == 'mod') { echo "";
  22. }
  23.  
  24.  if($row['gdzie'] == 'art')
  25. {
  26. $art = mysql_query("SELECT id, tytul FROM artykuly WHERE id='$row[id_s]' AND par='' LIMIT 1");
  27. $art = mysql_fetch_row($art);
  28.  
  29.  
  30. //if(strlen($art[1]) <= '20') { echo stripslashes("$art[1]"); }
  31.  // else { echo stripslashes(substr("$art[1]", 0, 20))."..."; }
  32.  
  33. echo "<tr><td style='font-family: Verdana; font-size: 11px; color: black;'> <P style='margin-left:20px; margin-top:0px;'><a href='art.php?id=$art[0]' />$art[1] <font style='color: gray'>[".mysql_num_rows(mysql_query("SELECT id_s, gdzie FROM komentarze WHERE gdzie='art' AND id_s='$art[0]' AND par=''"))."] [...]</font></a>";
  34. }
  35.  elseif($row['gdzie'] == 'galeria')
  36. {
  37. $art = mysql_query("SELECT id, tytul FROM galeria WHERE id='$row[id_s]' AND par='' LIMIT 1");
  38. $art = mysql_fetch_row($art);
  39. echo "<a href='temp_.php?page=galeria&galeria=".$art['0']."' target='_blank'>".$art['1']."</a>";
  40. }
  41. elseif($row['gdzie'] == 'turystyka_miasta')
  42. {
  43. $art = mysql_query("SELECT id, nazwa FROM turystyka_miasta WHERE id='$row[id_s]' AND par='' LIMIT 1");
  44. $art = mysql_fetch_row($art);
  45. echo "Turystyka-miasta: <a href='art_turystyka.php?id=$art[0]' target='_blank'>$art[1]</a></a>";
  46. }
  47.  elseif($row['gdzie'] == 'pb')
  48. {
  49.  
  50. $art = mysql_fetch_assoc(mysql_query("SELECT * FROM `pb_firmy` WHERE `id`='".$row['id_s']."' AND par=''"));
  51. echo "<a href='temp_.php?page=katalog_firm&show_comp=".$row['id_s']."'>".$art['nazwa']."</a>";
  52. }
  53. echo "</td></tr><tr><td style='border-left-width: 1px; border-right-width: 1px; border-top: 1px solid #000000; border-bottom-width: 1px;'></td></tr>";
  54. }
  55.  
  56.  
  57.  
  58. echo '</ul>';
  59.  
  60.  
  61.  
  62.  
  63. ?>


no i w efekcie udalo sie prezentowac jeden tytul artykulu tylko jeden raz, ale pojawil sie inny problem.
Mianowicie taki:
Jesli dodamy komentarz do artykulu ktory mial juz wczesniej dodany komentarz wtedy artykul nie wskakuje
na pierwsze miejsce listy. Wyglada na to skrypt prezentuje pogrupowane artykuly biorac pod uwage pierwszy dodany komentarz a nie ten najnowszy.

Moze wiecie jak to rozwiazac ?
Sedziwoj
Po co cały skrypt, mogłeś podać strukturę tabel bo mi się np. nie chce tego analizować.
zakładam:
tabela artykul:
id|nazwa
tabela komentarz:
id|artykul_id|data

Zapytanie:
  1. SELECT * FROM (SELECT `artykul_id`, max(`data`) AS `maks` FROM `komentarz` GROUP BY `artykul_id` ORDER BY `maks` LIMIT 5)
  2. AS `naj` LEFT JOIN `artykul` ON (`naj`.`artykul_id`=`artykul`.`id`);

Takie coś powinno działać.

EDIT formatowanie + mały błąd
graf
wiec wyglada to prawie tak jak napisales:
Tabela artykuly:
id, tytul
Tabela komentarze:
id, id_s, data

komentarze maja jeszcze status aktywny i nieaktywny: "par" oraz "gdzie" ktory ma zwiazek z przypisaniem komentarzy do galerii czy artykulow.

Mam cos takiego:

  1. <?php
  2. $q = mysql_query("SELECT id, tresc, gdzie, par, id_s, data FROM komentarze GROUP BY id_s HAVI
    NG gdzie='art' AND par!='mod' ORDER BY data DESC LIMIT 5"
    );
  3.  
  4. while($row = mysql_fetch_array($q))
  5.  
  6. // i dalej
  7.  
  8. if($row['par'] == 'mod') { echo "";
  9. }
  10.  
  11.  if($row['gdzie'] == 'art')
  12. {
  13. $art = mysql_query("SELECT id, tytul FROM artykuly WHERE id='$row[id_s]' AND par='' LIMIT 1");
  14. $art = mysql_fetch_row($art);
  15.  
  16. $row[tresc] //wyswietla komentarz
  17. $art[1] //wyswietla tytul artykulu
  18. ?>




... nie wiem jak wykorzystac Twoja podpowiedz Sedziwoj:

  1. SELECT * FROM (SELECT `artykul_id`, max(`data`) AS `maks` FROM `komentarz` GROUP BY `artykul_id` ORDER BY `maks` LIMIT 5)
  2. AS `naj` LEFT JOIN `artykul` ON (`naj`.`artykul_id`=`artykul`.`id`);


Kombinuje i gdzies mam caly czas blad sad.gif

  1. <?php
  2. $q = mysql_query("SELECT * FROM (SELECT `id_s`, max(`data`) AS `maks` FROM `komentarze` GROUP BY `id_s` ORDER BY `maks` LIMIT 5)");
  3. AS `naj` LEFT JOIN `artykuly` ON (`naj`.`id_s`=`artykuly`.`id`);
  4.  
  5. while($row = mysql_fetch_array($q))
  6.  
  7. // i dalej
  8.  
  9. if($row['par'] == 'mod') { echo "";
  10. }
  11.  
  12.  if($row['gdzie'] == 'art')
  13. {
  14. $art = mysql_query("SELECT id, tytul FROM artykuly WHERE id='$row[id_s]' AND par='' LIMIT 1");
  15. $art = mysql_fetch_row($art);
  16.  
  17. $row[tresc] //wyswietla komentarz
  18. $art[1] // wyswietla tytul artykulu
  19. ?>
Sedziwoj
  1. <?php
  2. ...
  3. $strSql = "SELECT * FROM (SELECT `id_s`, max(`data`) AS `maks` FROM `komentarze` GROUP BY `id_s` ORDER BY `maks` LIMIT 5) AS `naj` LEFT JOIN `artykuly` ON (`naj`.`id_s`=`artykuly`.`id`)";
  4. $q = mysql_query($strSql);
  5. ?>

a tak?
jak pojawia się jakiś błąd to pisz jaki.
graf
<?


if($_SESSION['lang'] == 'pl' or !isset($_SESSION['lang']))
{
$art_kategorie = "art";
}
else
{
$art_kategorie = "";
}
// $q = mysql_query("SELECT id, tresc, gdzie, par, id_s, data FROM komentarze GROUP BY id_s HAVING gdzie='".$art_kategorie."' AND par!='mod' ORDER BY data DESC LIMIT 10");
$strSql = "SELECT * FROM (SELECT `id_s`, max(`data`) AS `maks` FROM `komentarze` GROUP BY `id_s` HAVING gdzie='".$art_kategorie."' AND par!='mod' ORDER BY `maks` LIMIT 5) AS `naj` LEFT JOIN `artykuly` ON (`naj`.`id_s`=`artykuly`.`id`)";
$q = mysql_query($strSql);
echo "<ul type='square'>";
while($row = mysql_fetch_array($q))
{
echo ""; if($row['par'] == 'mod') { echo "";
}

if($row['gdzie'] == 'art')
{
$art = mysql_query("SELECT id, tytul FROM artykuly WHERE id='$row[id_s]' AND par='' LIMIT 1");
$art = mysql_fetch_row($art);



echo "<tr><td style='font-family: Verdana; font-size: 11px; color: black;'> <P style='margin-left:20px; margin-top:0px;'><a href='art.php?id=$art[0]' />$art[1] <font style='color: gray'>[".mysql_num_rows(mysql_query("SELECT id_s, gdzie FROM komentarze WHERE gdzie='art' AND id_s='$art[0]' AND par=''"))."] [...]</font></a>";
}
elseif($row['gdzie'] == 'galeria')
{
$art = mysql_query("SELECT id, tytul FROM galeria WHERE id='$row[id_s]' AND par='' LIMIT 1");
$art = mysql_fetch_row($art);
echo "<a href='temp_.php?page=galeria&galeria=".$art['0']."' target='_blank'>".$art['1']."</a>";
}
elseif($row['gdzie'] == 'turystyka_miasta')
{
$art = mysql_query("SELECT id, nazwa FROM turystyka_miasta WHERE id='$row[id_s]' AND par='' LIMIT 1");
$art = mysql_fetch_row($art);
echo "Turystyka-miasta: <a href='art_turystyka.php?id=$art[0]' target='_blank'>$art[1]</a></a>";
}
elseif($row['gdzie'] == 'pb')
{

$art = mysql_fetch_assoc(mysql_query("SELECT * FROM `pb_firmy` WHERE `id`='".$row['id_s']."' AND par=''"));
echo "<a href='temp_.php?page=katalog_firm&show_comp=".$row['id_s']."'>".$art['nazwa']."</a>";
}
echo "</td></tr><tr><td style='border-left-width: 1px; border-right-width: 1px; border-top: 1px solid #000000; border-bottom-width: 1px;'></td></tr>";
}



echo '</ul>';




?>
  1. <?
  2.  
  3.  
  4. if($_SESSION['lang'] == 'pl' or !isset($_SESSION['lang']))
  5.  {
  6. $art_kategorie = "art";
  7.  }
  8. else
  9.  {
  10. $art_kategorie = "";
  11.  }
  12. // $q = mysql_query("SELECT id, tresc, gdzie, par, id_s, data FROM komentarze GROUP BY id_s HAVI
    NG gdzie='".$art_kategorie."' AND par!='mod' ORDER BY data DESC LIMIT 10");
  13.  $strSql = "SELECT * FROM (SELECT `id_s`, max(`data`) AS `maks` FROM `komentarze` GROUP BY `id_s` HAVING gdzie='".$art_kategorie."' AND par!='mod' ORDER BY `maks` LIMIT 5) AS `naj` LEFT JOIN `artykuly` ON (`naj`.`id_s`=`artykuly`.`id`)";
  14. $q = mysql_query($strSql);
  15. echo "<ul type='square'>";
  16. while($row = mysql_fetch_array($q))
  17.  {
  18. echo ""; if($row['par'] == 'mod') { echo "";
  19. }
  20.  
  21.  if($row['gdzie'] == 'art')
  22. {
  23. $art = mysql_query("SELECT id, tytul FROM artykuly WHERE id='$row[id_s]' AND par='' LIMIT 1");
  24. $art = mysql_fetch_row($art);
  25.  
  26.  
  27.  
  28. echo "<tr><td style='font-family: Verdana; font-size: 11px; color: black;'> <P style='margin-left:20px; margin-top:0px;'><a href='art.php?id=$art[0]' />$art[1] <font style='color: gray'>[".mysql_num_rows(mysql_query("SELECT id_s, gdzie FROM komentarze WHERE gdzie='art' AND id_s='$art[0]' AND par=''"))."] [...]</font></a>";
  29. }
  30.  elseif($row['gdzie'] == 'galeria')
  31. {
  32. $art = mysql_query("SELECT id, tytul FROM galeria WHERE id='$row[id_s]' AND par='' LIMIT 1");
  33. $art = mysql_fetch_row($art);
  34. echo "<a href='temp_.php?page=galeria&galeria=".$art['0']."' target='_blank'>".$art['1']."</a>";
  35. }
  36. elseif($row['gdzie'] == 'turystyka_miasta')
  37. {
  38. $art = mysql_query("SELECT id, nazwa FROM turystyka_miasta WHERE id='$row[id_s]' AND par='' LIMIT 1");
  39. $art = mysql_fetch_row($art);
  40. echo "Turystyka-miasta: <a href='art_turystyka.php?id=$art[0]' target='_blank'>$art[1]</a></a>";
  41. }
  42.  elseif($row['gdzie'] == 'pb')
  43. {
  44.  
  45. $art = mysql_fetch_assoc(mysql_query("SELECT * FROM `pb_firmy` WHERE `id`='".$row['id_s']."' AND par=''"));
  46. echo "<a href='temp_.php?page=katalog_firm&show_comp=".$row['id_s']."'>".$art['nazwa']."</a>";
  47. }
  48. echo "</td></tr><tr><td style='border-left-width: 1px; border-right-width: 1px; border-top: 1px solid #000000; border-bottom-width: 1px;'></td></tr>";
  49. }
  50.  
  51.  
  52.  
  53. echo '</ul>';
  54.  
  55.  
  56.  
  57.  
  58. ?>


i wyskakuje blad:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /komentowane.php on line 16

czyli cos tu: while($row = mysql_fetch_array($q))
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.