Az a feladatom, hogy egy Pootle rendszerből gyűjtsem ki az 50 legszorgalmasabb fordítót. Egy MySQL lekérdezésre lenne szükségem, de sajnos elfelejtettem, amit valaha tudtam az SQL-ről, és a dolog sürgős.
Van egy fordítók tábla, az oszlopok: id, username, first_name, last_name, email stb.
Vagy egy statisztika jellegű tábla, az oszlopok között van egy submitter_id, ami a fordítók táblabeli id-vel azonos.
Odáig eljutottam, hogy mondjuk:
select count(*) from pootle_app_submission where submitter_id=14;
és akkor kijön, hogy 1671, azaz a 14-es id-jű ember 1671 fordítást csinált. Arra lenne szükségem, hogy egy olyan táblát kapjak eredményül, amiben az első 50 legnagyobb ilyen értékű ember van: "username, first_name, last_name, email, hányat csinált" formátumban, az utolsó oszlop szerint csökkenő sorrendben.
- 1396 megtekintés
Hozzászólások
SELECT username, first_name, last_name, email, count(pootle_app_submissions.submitter_id) AS hanyat_csinalt FROM {forditok} INNER JOIN pootle_app_submission AS sub ON {forditok}.id=sub.submitter_id GROUP BY {forditok}.id ORDER BY hanyat_csinalt DESC LIMIT 50
Régen volt előttem MySQL, de elvileg ezt meg kéne ennie és azt kéne kapnod vele, amit szeretnél.
Szerk: A count(tábla.*) nem nyerő
BlackY
- A hozzászóláshoz be kell jelentkezni
húúúúú bazzzz :)
én ilyeneket sohasem tudtam :)
- A hozzászóláshoz be kell jelentkezni
A tábla.* tényleg nem volt nyerő. A javítottra azt mondja:
ERROR 1054 (42S22): Unknown column 'pootle_app_submission.submitter_id' in 'field list'
De ha count(*)-ot írok csak, akkor is látszólag jól számol, nagyon úgy tűnik, hogy azt kaptam, amit szerettem volna, úgyhogy köszi! Meg tudod erősíteni, hogy nem elvi hibás?
SELECT username, first_name, last_name, email, count(*) AS hanyat_csinalt FROM auth_user INNER JOIN pootle_app_submission AS sub ON auth_user.id=sub.submitter_id GROUP BY auth_user.id ORDER BY hanyat_csinalt DESC LIMIT 50;
- A hozzászóláshoz be kell jelentkezni
Ha úgy tűnik, akkor igen :)
Részletesen: az inner join művelettel kapsz egy m soros táblát (n fordító, m fordítás), a group by-al összehúzod n sorra/csoportra, és a count-al az egy csoportba eső elemeket számolod.
Az submitter_id-es megoldásnak is mennie kellene, csak oda is sub.submitter_id kéne (utólag adtam hozzá az alias-t, és ott nem javítottam)
BlackY
- A hozzászóláshoz be kell jelentkezni
Egy próbát megér:
SELECT count(*) AS count,submitter_id FROM `pootle_app_submission` GROUP BY submitter_id ORDER BY count DESC LIMIT 0,50
- A hozzászóláshoz be kell jelentkezni
valami ilyesmi:
select count(*) as c, submitter_id from pootle_app_submission group by submitter_id order by c desc limit 50;
- A hozzászóláshoz be kell jelentkezni
Mindenkinek köszönöm a segítséget.
- A hozzászóláshoz be kell jelentkezni