Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mysql] jak zlaczyc dwa zapytania w jedno
yalus
post 1.08.2008, 14:20:05
Post #1





Grupa: Zarejestrowani
Postów: 281
Pomógł: 0
Dołączył: 8.07.2005
Skąd: EU

Ostrzeżenie: (0%)
-----


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?


--------------------
człowiek nie sznurek wszystko wytrzyma
Go to the top of the page
+Quote Post
JoShiMa
post 1.08.2008, 15:09:34
Post #2





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


  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'];


--------------------
Go to the top of the page
+Quote Post
webasek
post 1.08.2008, 15:15:08
Post #3





Grupa: Zarejestrowani
Postów: 274
Pomógł: 35
Dołączył: 18.07.2008
Skąd: Kielce

Ostrzeżenie: (0%)
-----


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


--------------------
"Tylko dwie rzeczy są nieskończone: wszechświat oraz ludzka głupota,
choć nie jestem pewien co do tej pierwszej." Albert Einstein

Wirtualny Rynek Predykcyjny
Go to the top of the page
+Quote Post
yalus
post 1.08.2008, 15:26:31
Post #4





Grupa: Zarejestrowani
Postów: 281
Pomógł: 0
Dołączył: 8.07.2005
Skąd: EU

Ostrzeżenie: (0%)
-----


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?


--------------------
człowiek nie sznurek wszystko wytrzyma
Go to the top of the page
+Quote Post
Kicok
post 1.08.2008, 15:32:49
Post #5





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


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 ;]

Ten post edytował Kicok 1.08.2008, 15:34:40


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
yalus
post 1.08.2008, 15:40:52
Post #6





Grupa: Zarejestrowani
Postów: 281
Pomógł: 0
Dołączył: 8.07.2005
Skąd: EU

Ostrzeżenie: (0%)
-----


super

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

nie dostane tego:

komedia (0)


--------------------
człowiek nie sznurek wszystko wytrzyma
Go to the top of the page
+Quote Post
Kicok
post 1.08.2008, 17:02:27
Post #7





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


Cytat
super

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


Sprawdź.


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
yalus
post 1.08.2008, 17:33:54
Post #8





Grupa: Zarejestrowani
Postów: 281
Pomógł: 0
Dołączył: 8.07.2005
Skąd: EU

Ostrzeżenie: (0%)
-----


sprawdzilem

tych zerowych mi nie wyswietla tylko tam gdzie jest jakas wartosc

mimo to dzieki


--------------------
człowiek nie sznurek wszystko wytrzyma
Go to the top of the page
+Quote Post
Kicok
post 1.08.2008, 17:53:57
Post #9





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


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


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
osiris
post 2.08.2008, 16:55:46
Post #10





Grupa: Zarejestrowani
Postów: 121
Pomógł: 15
Dołączył: 19.07.2007

Ostrzeżenie: (0%)
-----


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


Ten post edytował osiris 2.08.2008, 16:57:57
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 31.07.2025 - 08:43