Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
SGM
HV kasutaja

liitunud: 04.12.2005
|
30.01.2009 22:29:37
Keeruline mysql päring |
|
|
Mõnele võibolla tekitab järgnev ebameeldivaid reaktsioone, aga ehk ikka saan abi ka.
Nimelt teema selles, et minult telliti selline töö, et teha korda ühe rate-klooni edetabel. Teadagi need kuvavad pilte "ORDER BY hinne DESC" ja kogu moos. Aga asja probleem seisneb selles, et seal kuvatakse kõik pildid, siis võib olla edetabelis mingi kasutaja lausa 5 pildiga! Õige oleks nii, et iga inimene pääseb automaatselt edetabelisse vaid selle ühe pildiga, millel on kõrgeim skoor (lisaks muud parameetrid, mis praegu pole olulised). Kui tema mõne teise pildi skoor ületab eelmise oma, siis automaatselt vahetuks edetabelisse uus pilt, mitte ei läheks vanale lisaks. Maketiks anti mulle üks jabur päring (txt-failis), millest ma midagi aru ei saa praegu.
Enda tehtud lehtedel pole ma pidanud seda edetabeli korrektset olekut (ajukärsatamist) oluliseks, kuna ei fänna edetabeleid.
Seal, kus asi korda vaja teha, on hetkel päring selline: "SELECT * FROM photo WHERE ...blaa... ORDER BY score DESC", tabelis on kasutaja ID - "userid" ja just see peabki iga pildi puhul unikaalne olema, et see iial ei korduks edetabelis. On seda võimalik kuidagi teha?
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
 |
airm
HV Guru
liitunud: 26.02.2003
|
30.01.2009 22:46:52
|
|
|
group by on märksõna
|
|
Kommentaarid: 56 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
1 :: |
50 |
|
tagasi üles |
|
 |
SGM
HV kasutaja

liitunud: 04.12.2005
|
30.01.2009 22:56:26
|
|
|
airm kirjutas: |
group by on märksõna |
Juba läbiproovitud asi, ma sellega sain midagi eriti segast kuvama sinna. Põhiline, et megavalesti. :S
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
 |
tomps01
HV vaatleja
liitunud: 09.06.2004
|
30.01.2009 23:26:34
|
|
|
SGM kirjutas: |
airm kirjutas: |
group by on märksõna |
Juba läbiproovitud asi, ma sellega sain midagi eriti segast kuvama sinna. Põhiline, et megavalesti. :S |
http://dev.mysql.com/doc/refman/5.1/en/select.html on vist kaks sobivat group by kasutusviisi kirjas:
tsitaat: |
Posted by Callum Macdonald on June 27 2005 6:54pm [Delete] [Edit]
If you want to use ORDER BY before GROUP BY, the only way I've found to achieve it is with a subquery.
For example, if you want to get a list of users from a table UserActions sorted according to the most recent action (based on a field called Time) the query would be:
SELECT * FROM (SELECT * FROM UserActions ORDER BY Time DESC) AS Actions GROUP BY UserID ORDER BY Time DESC;
Without the subquery, the group is performed first, and so the first record that appears in the database (which is not necessarily in the order you want) will be used to determine the sort order. This caused me huge problems as my data was in a jumbled order within the table.
--Edit--
This same result can be achieved with the use of MAX(Time), so the query would be:
SELECT *, MAX(Time) AS LatestAction GROUP BY UserID ORDER BY LatestAction DESC;
As far as I can see, the subquery model still holds up if you need more complex sorting before performing the GROUP. |
|
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
 |
SGM
HV kasutaja

liitunud: 04.12.2005
|
31.01.2009 12:34:56
|
|
|
subquery ajabki mul juhtme suitsema. Kusjuures sain asja toimima isegi, tänu eelmise postitaja tsiteeritud näitele! Aga nüüd oleks vaja lisada sinna päringusse LEFT JOIN ja teine tabel. Siis millegipärast tuleb error, et "duplicate column: ID" vms.
On vaja seal 2 tabelit kokku liita, et välja filtreerida blokeeritud kasutajad. Ei saa ma aru, kuidas seda teha subquery-ga päringus.
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004

|
31.01.2009 12:40:41
|
|
|
SELECT tabel.tulp AS nimi, tabel2.tulp AS nimi2
Ehk siis ära kasuta *'i
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
SGM
HV kasutaja

liitunud: 04.12.2005
|
31.01.2009 13:18:54
|
|
|
Kas ma pean siis need JOIN-id ja tabelinimed panema välja või subquerisse? Või mõlemasse JOIN panema?
EDIT:
Ei pannud välja, panin vaid subquery sisse, aga väljapoole panin tulpade nimed ka kõik ükshaaval. Sain vist tööle lõpuks, nagu vaja. Tänud aitajatele!
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
 |
Absona
Lõuapoolik

liitunud: 17.09.2008
|
|
Kommentaarid: 11 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
0 :: |
8 |
|
tagasi üles |
|
 |
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|