Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL] Sumowanie, łączenie 2 tabel
slawo
post 27.01.2018, 15:00:25
Post #1





Grupa: Zarejestrowani
Postów: 182
Pomógł: 0
Dołączył: 11.01.2010
Skąd: Nowa Dęba

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


Na moim portalu chciałbym wyrzucić użytkownikowi płyty, które pobrał a nie ocenił. Tabela plyty i tabela ocena z id plyty i wybrana ocena. Jak policzyć ocenione płyty, które jednocześnie zostały pobrane? Użytkownik mógł ocenić płyt, których nie pobrał. Tu mam mały problem.

SELECT count(id) FROM plyty,oceny WHERE login_pobral=login_ocenil;


--------------------
zpodziemia.pl - największa baza dobrych nielegali w POLSCE!
Go to the top of the page
+Quote Post
markuz
post 27.01.2018, 20:46:14
Post #2





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

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


Pokaż strukturę tych tabel.


--------------------
Go to the top of the page
+Quote Post
goartur
post 27.01.2018, 21:49:13
Post #3





Grupa: Zarejestrowani
Postów: 233
Pomógł: 27
Dołączył: 19.10.2014

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


  1. SELECT (SELECT COUNT(*) FROM table1) + (SELECT COUNT(*) FROM table2) FROM dual


A nie lepiej poprostu pobrac 2 tabele osobno i sprawidzic ilosc wynikow i je podsumowac?

Ten post edytował goartur 27.01.2018, 21:50:40
Go to the top of the page
+Quote Post
slawo
post 30.01.2018, 09:06:54
Post #4





Grupa: Zarejestrowani
Postów: 182
Pomógł: 0
Dołączył: 11.01.2010
Skąd: Nowa Dęba

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


albumy_pobrania: id | album | login
albumy_ocena: id | album | dodal

album - numer ID płyty z bazy

Wynikiem ma być ilość nieocenionych pobranych płyt. Tzn:

jeżeli użytkownik pobrał 5 płyt nie ocenił żadnej wynik ma być 5
jeżeli użytkownik pobrał 5 płyt a ocenił inne płyty wynik ma być 5
jeżeli użytkownik pobrał 5 płyt i ocenił 3 z nich wynik ma być 2
jeżeli użytkownik pobrał 5 płyt i ocenił te 5 płyt wynik ma być 0


  1. $licz_plyty_nieocenione = mysql_query("SELECT COUNT(*) as ilosc FROM albumy_ocena,albumy_pobrania WHERE login=dodal AND album=album AND login='$login' AND dodal='$login'");
  2. $lpo = mysql_fetch_array($licz_plyty_nieocenione, MYSQL_ASSOC);


Nie działa, może dlatego, że album=album?

Chyba mam:

  1. $licz_plyty_ocenione = mysql_query("SELECT COUNT(*) as ilosc FROM albumy_ocena a,albumy_pobrania b WHERE b.login=a.dodal AND a.album=b.album AND b.login='$login' AND a.dodal='$login'");
  2. $lpo = mysql_fetch_array($licz_plyty_ocenione, MYSQL_ASSOC);


Jednak nie działa do końca jak trzeba ;( Muszę coś jeszcze dopisać...


--------------------
zpodziemia.pl - największa baza dobrych nielegali w POLSCE!
Go to the top of the page
+Quote Post
mmmmmmm
post 30.01.2018, 10:01:37
Post #5





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


  1. SELECT Count(p.id) ilosc_pobranych, Count(o.id) ilosc_ocenionych FROM albumy_pobrania o LEFT JOIN albumy_ocena o ON o.login=p.login AND p.album=o.album
Go to the top of the page
+Quote Post
slawo
post 30.01.2018, 10:28:57
Post #6





Grupa: Zarejestrowani
Postów: 182
Pomógł: 0
Dołączył: 11.01.2010
Skąd: Nowa Dęba

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


Sprawdze jak będę w domu. Jeszcze jeden warunek trzeba dopisać. Niektóre płyty są pobrane 2, 3 razy i liczy. Powinno policzyć pojedyńczo niezależnie od ilości pobrań.


--------------------
zpodziemia.pl - największa baza dobrych nielegali w POLSCE!
Go to the top of the page
+Quote Post
Toshikatsu
post 30.01.2018, 10:50:36
Post #7





Grupa: Zarejestrowani
Postów: 26
Pomógł: 3
Dołączył: 18.10.2017

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


A mnie zastanawia ile to lat trzeba ćwiczyć żeby zrobić zapytanie z jednym joinem? :V
W ogóle szukasz czegoś sam czy za każdym razem przylatujesz tutaj z czymś co chcesz i liczysz, że ktoś wszystko zrobi?

Group by/Distinct - mówi Ci to coś?
Go to the top of the page
+Quote Post
slawo
post 30.01.2018, 17:39:30
Post #8





Grupa: Zarejestrowani
Postów: 182
Pomógł: 0
Dołączył: 11.01.2010
Skąd: Nowa Dęba

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


Wiem, że trzeba pogrupować. Nikt nie musi mi tego pisać. Spokojnie.

Okej mam, działa. Jeśli wyniki tych dwóch zapytań będą takie same to oznacza, że wszystkie pobrane płyty zostały ocenione Lkingsmiley.png Dziękuje wszystkim za pomoc! thumbsupsmileyanim.gif

  1. $licz_plyty_ocenione = mysql_query("SELECT COUNT(DISTINCT a.album) as ilosc FROM albumy_pobrania a, albumy_ocena b WHERE a.login=b.dodal AND a.login='$login' AND b.dodal='$login' AND a.album=b.album");
  2. $lpo = mysql_fetch_array($licz_plyty_ocenione, MYSQL_ASSOC);
  3.  
  4. $licz_plyty_pobrane = mysql_query("SELECT COUNT(DISTINCT album) as ilosc2 FROM albumy_pobrania WHERE login='$login'");
  5. $lpp = mysql_fetch_array($licz_plyty_pobrane, MYSQL_ASSOC);


--------------------
zpodziemia.pl - największa baza dobrych nielegali w POLSCE!
Go to the top of the page
+Quote Post
mmmmmmm
post 31.01.2018, 11:27:02
Post #9





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


Po c. piszesz na forum, skoro nie stosujesz się do odpowiedzi?
W 1 linii towjego kodu użyj JOIN -m się prosi.
A gdybyś użył LEFT JOIN (czyli takie zapytanie jak ja powyżej), to zrobiłbyś to za jednym zamachem. Dla 400 rekordów nie odczujesz różnicy, dla 400 tysięcy tak.
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: 19.04.2024 - 20:31