Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL]Zapytanie z JOIN
mirobor
post
Post #1





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 1.02.2014

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


Mam takie o to zapytanie:
  1. SELECT *, COUNT(f.id) AS vot
  2. FROM votes v JOIN films f ON (v.film_id = f.id)
  3. GROUP BY f.id
  4. ORDER BY id ASC

Jego wadą jest to że pokazuje tylko pozycje dla których relacja istnieje, pomijając inne z tabeli films. Próbuję je zmodyfikować, tak, aby pozycje z films bez relacji z votes także były pobierane. Poczytałem i kombinuję z LEFT JOIN, ale nie mogę tego zapytania właściwie zmodyfikować.
Pozdrawiam
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Jak slusznie zauwazyles masz uzyc LEFT JOIN.
Ino ze glowną tabelą ma byc FILMS a JOINowaną tabela z glosami. Przeciez chcesz wyswietlic wszystkie filmy
Go to the top of the page
+Quote Post
kartin
post
Post #3





Grupa: Zarejestrowani
Postów: 246
Pomógł: 79
Dołączył: 25.05.2010

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


Może być też RIGHT JOIN.
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Ja tam jestem zwolennikiem LEFT JOIN - jest dla mnie bardziej logiczny, może dlatego ze cale zycie czytam od lewa do prawa a nie na odwrot (IMG:style_emoticons/default/wink.gif)
Poza tym
Cytat
RIGHT JOIN works analogously to LEFT JOIN. To keep code portable across databases, it is recommended that you use LEFT JOIN instead of RIGHT JOIN.
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #5





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

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


Ta. SQLite nie ma RIGHT (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
mirobor
post
Post #6





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 1.02.2014

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


Wykonując w phpmadmin:
  1. SELECT *, COUNT(f.id) AS vot
  2. FROM votes v RIGHT JOIN films f ON (v.film_id = f.id)
  3. GROUP BY f.id
  4. ORDER BY id;

jak również:
  1. SELECT *, COUNT(v.id) AS vot
  2. FROM films v LEFT JOIN votes f ON (v.id = f.film_id)
  3. GROUP BY v.id
  4. ORDER BY id;


vot przybiera wartość 1 dla filmów bez głosów.
Co powinienem zrobić aby ustawić kolejność rosnącą i wyświetlić poprzez skrypt pozycje rosnąco wg oddanych głosów od 0(brak głosów)?
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




  1. SELECT *, COUNT(f.film_id) AS vot
  2.  
  3. FROM films v LEFT JOIN votes f ON (v.id = f.film_id)
  4.  
  5. GROUP BY v.id
  6.  
  7. ORDER BY id;

Patrz co zliczasz.... (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
kartin
post
Post #8





Grupa: Zarejestrowani
Postów: 246
Pomógł: 79
Dołączył: 25.05.2010

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


Bez LEFT | RIGHT nie miało to znaczenia w której tabeli zliczałeś ID filmu, jednak teraz ma.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.09.2025 - 14:15