Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL] 2 zapytania w jednym
Forum PHP.pl > Forum > Przedszkole
Zwariowany
SELECT * from `newsy` WHERE `type` = 1 ORDER BY `czas` DESC LIMIT 0 , 9;

Jak zrobić żeby ten select również odczytał ilość z tabeli komentarze gdzie `komentarze`.`iddlaartykulu` = `newsy`.`artykulid`.
Dodam że jeden komentarz w tabelii komentarze to jeden wiersz. Czyli chodzi mi o to jak od razu policzyć ilość komentarzy do artykułu?


Pozdrawiam
potreb
  1. SELECT a.*, b.* FROM newsy a LEFT JOIN komentarze b ON a.idartykulu =b.artykulid
  2. ORDER BY `a.czas` DESC LIMIT 0, 9;
Zwariowany
a nie da rady bez left joinu?
potreb
Możesz oczywiście zrobić dwie pętle pobierające newsy i później komentarze, ale wg mnie nie jest to super rozwiązanie.
  1. <?php
  2. $n = mysql_query("SELECT * FROM newsy");
  3. while($r = mysql_fetch_object($n)) {
  4. $idnews = $r->id;
  5. }
  6.  
  7. $c = mysql_query("SELECT * FROM komentarze WHERE idnewsa='$idnews'");
  8. while($r = mysql_fetch_object($c)) {
  9. echo $r->komentarz;
  10. }
  11. ?>
Zwariowany
nie no zdaje sobie sprawę, że 2 zapytanie to nie o to chodzi, ale wcześniej robiłem to jak potrzebowałem 2 tabele połączyć to bez left joina tylko normalnie AND itd itd. A teraz trzeba ilość wyciągnąć i z tym jest problem ;/
phpion
Cytat(Zwariowany @ 3.05.2009, 11:15:07 ) *
A teraz trzeba ilość wyciągnąć i z tym jest problem ;/

No właśnie, pomoc kolegi ~potreb jest lekko nie na temat.

Aby zrobić to co chcesz musisz skorzystać z podzapytania oraz funkcji agregującej COUNT().
Zwariowany
kurcze takie coś próbuje ale nie działa:

SELECT * from `newsy`, (SELECT COUNT(*) FROM `komentarze` WHERE `iddlaartykulu` = `newsy`.`id`) WHERE `newsy`.`type` = 1 ORDER BY `newsy`.`czas` DESC LIMIT 0 , 9;
phpion
Cytat(Zwariowany @ 3.05.2009, 11:23:28 ) *
nie działa:

Zawsze podawaj jaki błąd dostajesz tudzież dlaczego wg Ciebie nie działa (otrzymuejsz złe wyniki?). Tak czy srak spróbuj tak:
  1. SELECT *, (SELECT COUNT(*) FROM `komentarze` WHERE `iddlaartykulu` = `newsy`.`id`) AS ile FROM `newsy` WHERE `newsy`.`type` = 1 ORDER BY `newsy`.`czas` DESC LIMIT 0, 9;
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.