Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] jak zlaczyc dwa zapytania w jedno
Forum PHP.pl > Forum > Bazy danych > MySQL
yalus
czesc

mam oto takie dwa zapytania:

  1. <?php
  2. $zapytanie="Select count(id_c) as numrows from comments where id=".$row['id'];
  3. $result_total = mysql_query($zapytanie) or die('-' );
  4. $ilosc = mysql_fetch_array($result_total, MYSQL_ASSOC);
  5. $ilosc_comm = $ilosc['numrows'];
  6.  
  7. $zapytanie="Select count(id_c) as numrows from comments where ocena='1' and id=".$row['id'];
  8. $result_1 = mysql_query($zapytanie) or die('-' );
  9. $ilosc_1 = mysql_fetch_array($result_1, MYSQL_ASSOC);
  10. $ilosc_comm_1 = $ilosc_1['numrows'];
  11. ?>


Jest to fragment kodu zywcem wyjety ze skryptu. Jak widac nie sa one za bardzo skomplikowane oraz to ze sa bardzo podobne do siebie.
W pierwszym chce wyciagnac wszystkie komentarze o zadanym ID a w drugim chce wyciagnac komentarze o tym samym ID co w pierwszym ale tylko takie gdzie ocena=1

pytanie moje jest takie: czy jest mozliwe skonstruowanie jednego zapytania przy pomocy ktorego uzyskam ten sam wynik?
JoShiMa
  1. SELECT count(id_c) AS numrows FROM comments WHERE id=".$row['id'] or (ocena='1' and id=".$row['id']);


ALe wtedy sodtaniesz sumę. Jak chcesz dwie liczby to

  1. SELECT count(id_c) AS numrows FROM comments WHERE id=".$row['id']
  2. UNION
  3. Select count(id_c) as numrows from comments where ocena='1' and id=".$row['id'];
webasek
Można też tak:

  1. SELECT count(id_c) AS numrows, (SELECT count(id_c) FROM comments WHERE ocena='1' AND id=".$row['id']) as cos from comments where id=".$row['id']


wiem dziwnie wygląda ale też działa smile.gif
yalus
dzieki zaraz wyprobuje

ale w miedzy czasie nasunelo mi sie jeszzcze jedno pytanie, otoz:

mam dwie tabele:

category i tytul

id,category
1,sensacja
2,horror
3,komedia
4,dramat

tytul, id_cat
pulp fiction, 1
casino royal,1
pila,2
przeminelo z wiatrem,4

i teraz przy pomocy jednego zapytania chcialbym uzyskac cos takiego:

sensacja (2)
horror (1)
komedia (0)
dramat (1)

czy wiedzielibyscie jak skonstruowac zapytanie mysql?
Kicok
LEFT JOIN + GROUP BY + COUNT()

Łączysz obie tabele przy pomocy: category.id = tytul.id_cat i grupujesz po category.id


PS. Warto też zamienić "tytul" na "title" i "ocena" na "mark". Jak po angielsku, to po angielsku ;]
yalus
super

ale to mi nie pokaze tych kategorii gdzi nic nie ma, prawda?

nie dostane tego:

komedia (0)
Kicok
Cytat
super

ale to mi nie pokaze tych kategorii gdzi nic nie ma, prawda?


Sprawdź.
yalus
sprawdzilem

tych zerowych mi nie wyswietla tylko tam gdzie jest jakas wartosc

mimo to dzieki
Kicok
Musiałeś coś namieszać z łączeniem tabel. Mi takie zapytanie zwraca poprawne wyniki:
  1. SELECT c.category, COUNT( t.id_cat ) AS count
  2. FROM category c
  3. LEFT JOIN tytul t ON ( c.id = t.id_cat )
  4. GROUP BY c.id
osiris
ale kombinujecie, jakies operacje zbiorowe, podzapytania...
nie prosciej tak:
  1. SELECT COUNT(*) AS ile_wszystkich, COUNT(CASE WHEN ocena='1' THEN 1 ELSE NULL END) AS ile_z_ocena_jeden
  2. FROM comments WHERE id = $id
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.