Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: sortowanie jednej tablicy według 'count(*)' w drugiej
Forum PHP.pl > Forum > Bazy danych
Dynuel
mam dwie tablice:

languages:
--------------------------
id | name
--------------------------
1 | polish
2 | english

articles:
--------------------------
language | ... i wiele nie innych nie istotnych w tym pytaniu
--------------------------
1 | ...
1 | ...
2 | ...
1 | ...
...

i teraz chciałbym wybrać z tablicy 'languages' id name posortowane wedłog ilosci rekortów w tablicy 'articles' gdzie pole 'language' odpowiada 'id' z tabeli 'languages'

udało mi sie napisać takie zapytanie które właściwie rozwiązuje problem

  1. SELECT LANGUAGE, COUNT( * )
  2. FROM articles GROUP BY LANGUAGE
  3. ORDER BY `COUNT( * )` DESC


co daje efekt:

language | count(*)
----------------------------------
2 | 7
1 | 2

lecz przydało by mi sie jeszcze w wyniku kolumna 'name' z tabeli languages

by wynik wyglądał tak:

id | name | ilosc
------------------------------------
2 | English | 7
1 | Polish | 2



na mysql'u nie znam sie za bardzo, jedynie podstawy, w sumie nigdy nie było mi nic wiecej potrzebne, az dzisiaj w ogole odkryłem ze istnieje coś takiego jak łączenie tablic itp itd

do pomocy podrzucam to z czego sam kozystałem:


  1. SELECT name, birth, death, (YEAR(death)-YEAR(birth)) - (RIGHT(death,5)<RIGHT(birth,5))
  2. AS age FROM pet WHERE death IS NOT NULL ORDER BY age;
  3.  
  4. SELECT article, dealer, price FROM shop WHERE price=(SELECT MAX(price) FROM shop); SELECT article, MAX(price) AS price FROM shop GROUP BY article
  5.  
  6. SELECT LANGUAGE, COUNT( * ) FROM articles GROUP BY LANGUAGE
  7.  
  8.  
  9.  
  10.  
  11. 3.3.4.9. USING More Than one TABLE
  12.  
  13.  
  14. mysql> SELECT pet.name,
  15. -> (YEAR(date)-YEAR(birth)) - (RIGHT(date,5)<RIGHT(birth,5)) AS age,
  16. -> remark
  17. -> FROM pet INNER JOIN event
  18. -> ON pet.name = event.name
  19. -> WHERE event.type = 'litter';
  20.  
  21.  
  22.  
  23. mysql> SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species
  24. -> FROM pet AS p1 INNER JOIN pet AS p2
  25. -> ON p1.species = p2.species AND p1.sex = 'f' AND p2.sex = 'm';


ok rozwiązałem problem na podstawie tego: http://forum.php.pl/index.php?showtopic=57...413?entry312391



  1. SELECT
  2. p.id, p.name, count(m.LANGUAGE) AS ilosc
  3. FROM languages p LEFT OUTER JOIN articles m ON p.id = m.LANGUAGE
  4. GROUP BY
  5. p.id, p.name
  6. ORDER BY ilosc DESC


sam nie wiem jak mi sie udało haha.gif aczkolwiek czy nie da sie tego jakoś uprościć??

ze kolumna 'ilosc' moze pozostac 'count(*)' bo w sumie to juz nie jest takie istotne,

oraz by nie było np tych skrótów m oraz p questionmark.gif? tylko pełne nazwy

ok mimo iz tego w ogole nie kapuje działa haha.gif
DeyV
bardzo ładnie.
zapytanie jest poprawne i raczej optymalne.

powinno tak zostać.
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.