Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> sortowanie jednej tablicy według 'count(*)' w drugiej
Dynuel
post
Post #1





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 27.12.2003

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


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 (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ? tylko pełne nazwy

ok mimo iz tego w ogole nie kapuje działa (IMG:http://forum.php.pl/style_emoticons/default/haha.gif)

Ten post edytował Dynuel 6.03.2007, 19:26:53
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
DeyV
post
Post #2





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




bardzo ładnie.
zapytanie jest poprawne i raczej optymalne.

powinno tak zostać.
Go to the top of the page
+Quote Post

Posty w temacie


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: 4.10.2025 - 02:02