Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Trudności z zapytanie
Forum PHP.pl > Forum > Bazy danych > MySQL
deha21
Potrzebuje zarobić zapytanie, który wyciągnie mi z bazy TITLE oraz VIEWS z tabeli NEWS, ale posortowane wg ilości komentarzy. Mam do tego dwie tabele: NEWS i KOMENTARZE.
z NEWS potrzebuję wyciągnąć TITLE i VIEWS
z KOMENTARZE pogrupować komentarze wg pola NEWS_ID
Chce żeby mi wyświetliło 500 newsów, w których było najwięcej komentarzy oraz ilość wyświetleń tych newsów.

Próbowałem z czymś takim ale za cholerę nie wiem jak to zrobić - nie jestem dobry w skomplikowanych zapytaniach.
  1. $result=mysql_query("SELECT id, news FROM komentarze GROUP BY news ORDER BY SUM(news) LIMIT 500");
  2. while ($row=mysql_fetch_array($result)) {
  3. $ask=mysql_query("SELECT title, views FROM news WHERE id='".$row['news']."'");
  4. $askrow=mysql_fetch_assoc($ask);
  5. echo $askrow['title'],' - ',$askrow['views'],'<br>';
  6. }
bpskiba
Cytat(deha21 @ 18.04.2012, 17:33:48 ) *
Potrzebuje zarobić zapytanie, który wyciągnie mi z bazy TITLE oraz VIEWS z tabeli NEWS, ale posortowane wg ilości komentarzy. Mam do tego dwie tabele: NEWS i KOMENTARZE.
z NEWS potrzebuję wyciągnąć TITLE i VIEWS
z KOMENTARZE pogrupować komentarze wg pola NEWS_ID
Chce żeby mi wyświetliło 500 newsów, w których było najwięcej komentarzy oraz ilość wyświetleń tych newsów.

Próbowałem z czymś takim ale za cholerę nie wiem jak to zrobić - nie jestem dobry w skomplikowanych zapytaniach.
  1. $result=mysql_query("SELECT id, news FROM komentarze GROUP BY news ORDER BY SUM(news) LIMIT 500");
  2. while ($row=mysql_fetch_array($result)) {
  3. $ask=mysql_query("SELECT title, views FROM news WHERE id='".$row['news']."'");
  4. $askrow=mysql_fetch_assoc($ask);
  5. echo $askrow['title'],' - ',$askrow['views'],'<br>';
  6. }


  1. SELECT count(id), news FROM komentarze GROUP BY news ORDER BY 2 DESC LIMIT 500
o ile dobrze zrozumiałem


  1. SELECT k.title,count(k.id) AS views
  2. FROM news n
  3. JOIN komentarze k ON k.news_id=n.id
  4. GROUP BY k.title
  5. ORDER BY 2 DESC
  6. LIMIT 500

czy to??
mortus
Ale gdzie w bazie danych zapisana jest ilość wyświetleń?
  1. SELECT `n`.`title`,`n`.`views`, COUNT(`k`.`id`) AS `liczba_komentarzy` FROM `news` `n` LEFT JOIN `komentarze` `k` ON `n`.`id` = `k`.`news_id` GROUP BY `n`.`id` ORDER BY `liczba_komentarzy` DESC
deha21
Działa mi pierwszy zapytanie od bpskiba, ale z tego co widzę to chyba źle coś zlicza. Reszta w ogóle nic nie wyświetla.
mortus, ilość wyświetleń jest w tabeli NEWS w polu VIEWS
mortus
No tak popełniłem literówkę wcześniej (już poprawiłem) i zamiast COUNT napisałem COUTN. Skrypt:
  1. $sql = "SELECT `n`.`title`,`n`.`views`, COUNT(`k`.`id`) AS `liczba_komentarzy` FROM `news` `n` LEFT JOIN `komentarze` `k` ON `n`.`id` = `k`.`news_id` GROUP BY `n`.`id` ORDER BY `liczba_komentarzy` DESC LIMIT 500";
  2. $results = mysql_query($sql);
  3. while($row = mysql_fetch_assoc($results)) {
  4. echo $row['title'] . ' - ' . $row['views'] . '<br/>';
  5. }
deha21
Dzięki. Literówkę zauważyłem ale nie działało. Ale teraz działa wink.gif
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-2024 Invision Power Services, Inc.