Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> 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 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

Ten post edytował Dynuel 6.03.2007, 19:26:53


--------------------
Go to the top of the page
+Quote Post
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ć.


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
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 Aktualny czas: 19.08.2025 - 04:06