Stránka: 1 z 1
| [ Príspevkov: 13 ] | |
Autor | Správa |
---|
Registrovaný: 07.08.06 Prihlásený: 18.11.21 Príspevky: 947 Témy: 268 | 268 Bydlisko: Levice |
Mam MySQL databazu so stlpcami ID, KOHO, KTO, DAT potrebujem vypisat len jedinecne vysledky zo stlpca KTO /teda nie duplikatne/ ale zoradit vysledky podla DAT. (DAT je v tabulke ako datetime 0000-00-00 00-00) Skusal som vsetko mozne, vytiahnut jedinecne udaje KTO sa mi podarilo, avsak nezoraduje to podla datumu. Kód: $mysqli->query("SELECT koho, kto, datum FROM navstevy WHERE koho='$uid' group by koho ORDER BY max(datum) DESC LIMIT 10") Skusal som aj trochu komplikovanejsie Kód: $mysqli->query("SELECT t.* FROM (SELECT kto, MAX(dat) as dat FROM navstevy WHERE koho='$uid' GROUP BY kto) a INNER JOIN navstevy t ON (t.dat = a.dat) ") ; V tomto druhom pripade to funguje pekne ak sa jedna o rovnakeho uzivatela - vypise ho len raz, a s poslednym datumom. Avsak ked tam pribudne dalsi uzivatel so starsim datumom, zobrazuje ho skor, hoci by ho mal zobrazit na konci, kedze najprv ma ist novsi datum... viete niekto poradit?
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
Neviem, ci som to spravne pochopil - ty potrebujes vytiahnut najnovsi zaznam pre kazdu jedinecnu hodnotu kto, kde koho = $uid? Skus, ci bude vystup taky, aky potrebujes: Kód: SELECT koho, kto, dat FROM navstevy AS n WHERE n.koho = '$uid' AND NOT EXISTS ( SELECT 1 FROM navstevy WHERE koho = n.koho AND kto = n.kto AND dat > n.dat ) GROUP BY n.kto ORDER BY n.dat DESC
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 07.08.06 Prihlásený: 18.11.21 Príspevky: 947 Témy: 268 | 268 Bydlisko: Levice |
presne tak stenley ako pises - vsetky jedinecne hodnoty KTO kde KOHO = $uid zoradene podla dat. Ten tvoj sposob vyzera inteligentnejsie, mohol by fungovat.
Skusal som aj pomocou distinct, ale ani tym sposobom ani tymito mojimi uvedenymi som nevedel vytiahnut vsetky udaje, teda SELECT *. Nastastie tato tabulka ma len niekolko columnov, tak som to rovno vypisal SELECT koho, kto, dat...
a kupodivo ked som k tomu mojmu druhemu rieseniu doplnil na koniec ORDER BY dat DESC, tak to funguje tiez $mysqli->query("SELECT t.* FROM (SELECT kto, MAX(dat) as dat FROM navstevy WHERE koho='$uid' GROUP BY kto) a INNER JOIN navstevy t ON (t.dat = a.dat) ORDER BY dat DESC") ;
Tak ci tak by som do buducna rad vedel, ako vytiahnut vsetky hodnoty z riadku dtb (*), pricom jeden stlpec bude jedinecny. Teda napr. mam 10 stlpcov plus jeden s nazvom KTO. Aby som vedel vytiahnut vsetky jedinecne KTO, ale zaroven vsetky hodnoty stlpcov z toho riadku a zoradene podla niecoho.
Cize to iste co sme riesili teraz, akurat aby som netahal len 3 columny z dtb SELECT koho, kto, dat ale vsetky *.
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
V tom mojom priklade mozes kludne nahradit vymenovane stlpce za *
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 29.10.07 Prihlásený: 27.10.23 Príspevky: 1395 Témy: 30 | 30 Bydlisko: Bratislava |
Nie stenley, vymenovane stlpce nemoze nahradit za * a som presvedceny, ze tvoj vyber ani nebude fungovat tak ako je napisany. Dovodom je GROUP BY v ktorom nemas vymenovane vsetky stpce.
Spravne riesenie je to co pise neopagan (SELECT FROM SELECT)... jedine riziko vidim v tom ze ako kluc pouziva datum... ale ak sa moze spolahnut na to, ze v jednom case nebudu 2 navstevy, tak ej to OK.
_________________ PC: OS: Windows 11 (64bit) CPU: AMD Ryzen 5 3600 GPU: ASUS TUF RTX3060Ti 8GB RAM: 16GB DDR4-3200MHz Kingston Fury MB: ASUS TUF Gaming B550M WIFI SSD: 1000GB PCIe M.2 NVME Mobil: Xiaomi POCO F2 PRO |
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
Presvedceny mozes byt, ale pravdu nemas. Ten select funguje pre mysql tak ako je napisany, aj ked som prave zistil, ze group by je tam zrejme zbytocne.
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 29.10.07 Prihlásený: 27.10.23 Príspevky: 1395 Témy: 30 | 30 Bydlisko: Bratislava |
Beriem spat... mysql sa tu sprava trochu inak ako ine DB Chybu nevyhodi, ale aj napriek tomu tento pristup neodporucam (hoc moze niekedy zvysit rychlost vyberu). - bud vieme, ze vsetky hodnoty v stlpci su rovnake a mozeme tam dat bezpecne group by - alebo si tym nemozeme byt isty a urcime si ci chceme MIN/MAX/atd z daneho stlpca Nepouzit na stlpec ziadnu agregovanu funkciu a ani ho neuviest v group by znemena, ze si mysql moze z daneho stlpca vybrat cokolvek... to moze robit problem pri zoradovani. Podla toho co citam sa da toto spravanie vypnut v nastaveni servera, tak aby sa ohladom GROUP BY spravala databaza standardne.
_________________ PC: OS: Windows 11 (64bit) CPU: AMD Ryzen 5 3600 GPU: ASUS TUF RTX3060Ti 8GB RAM: 16GB DDR4-3200MHz Kingston Fury MB: ASUS TUF Gaming B550M WIFI SSD: 1000GB PCIe M.2 NVME Mobil: Xiaomi POCO F2 PRO |
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 | 34 Bydlisko: Brno |
Stenley, fungovat to funguje, ale je to humus. Ziadna ina DB toto nepovoluje, vysledok nie je deterministicky a MySQL sa nesprava v sulade so standardom (ako u mnoha inych veci). (Analogia: to je ako ucit niekoho, ze ternarny operator je asociativny zlava, lebo v PHP sa to tak sprava.)
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
Namiesto toho, aby ste mi tu (zbytocne) vysvetlovali "ako sa veci maju", by ste radsej mohli pomoct neopaganovi v rieseni jeho problemu. Urcite by bol rad, keby mu poradili aj znalci databazovych standardov, aby bol sposob, akym sa k spravnemu vysledku dopracuje, co najefektivnejsi. Verim, ze prispejete aj vy svojim kusom kodu, nech sa ma cim inspirovat...
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 29.10.07 Prihlásený: 27.10.23 Príspevky: 1395 Témy: 30 | 30 Bydlisko: Bratislava |
To moje zbytocne vysvetlovanie som sem uviedol len kvoli zaznamu Nepochybujem ze ty vies ako veci funguju. neopagan to vybera spravne (ten jeho druhy komplikovanejsi sposob). Jedine co mu tam na konci chybalo bol ORDER BY
_________________ PC: OS: Windows 11 (64bit) CPU: AMD Ryzen 5 3600 GPU: ASUS TUF RTX3060Ti 8GB RAM: 16GB DDR4-3200MHz Kingston Fury MB: ASUS TUF Gaming B550M WIFI SSD: 1000GB PCIe M.2 NVME Mobil: Xiaomi POCO F2 PRO |
|
Registrovaný: 07.08.06 Prihlásený: 18.11.21 Príspevky: 947 Témy: 268 | 268 Bydlisko: Levice |
diky... ano to ORDER BY na konci pomohlo a tak to funguje. Len ak viete este poradit ohadom toho co som pisal - ak by som chcel vytiahnut vsetky udaje zo vsetkych columnov, nie len SELECT koho, kto, datum tak ako by sa malo postupovat?
Ked tvrdite ze nemozem do stenleyho verzie dat *, resp. mozem ale podla vas je to riesenie nestandardne?
Do toho mojho riesenia tam * nemozem pouzit, to nefungovalo tak.
|
|
Registrovaný: 29.10.07 Prihlásený: 27.10.23 Príspevky: 1395 Témy: 30 | 30 Bydlisko: Bratislava |
Nerozumiem, ved v tom tvojom (druhom) rieseni mas *...
_________________ PC: OS: Windows 11 (64bit) CPU: AMD Ryzen 5 3600 GPU: ASUS TUF RTX3060Ti 8GB RAM: 16GB DDR4-3200MHz Kingston Fury MB: ASUS TUF Gaming B550M WIFI SSD: 1000GB PCIe M.2 NVME Mobil: Xiaomi POCO F2 PRO |
|
Registrovaný: 07.08.06 Prihlásený: 18.11.21 Príspevky: 947 Témy: 268 | 268 Bydlisko: Levice |
ah ano, pozeral som tu prvu verziu, nie druhu... a tam v druhej ma domotal ten vnutorny SELECT kto, MAX(dat) .. jasne, takto mozem vytiahnut vsetky data... takze dakujem
|
|
Stránka: 1 z 1
| [ Príspevkov: 13 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| v Databázy | 2 | 539 | 30.09.2016 15:12 JanoF | | v Databázy | 2 | 451 | 11.11.2013 9:27 Villagers | | v Databázy | 1 | 968 | 04.01.2009 19:24 rooobertek | | v PHP, ASP | 22 | 1564 | 21.08.2008 16:54 p360t | | v PHP, ASP | 3 | 502 | 23.11.2011 23:32 walther | | v PHP, ASP | 6 | 515 | 04.06.2010 10:42 camo | | v Databázy | 2 | 873 | 11.08.2008 19:40 Speeder21 | | v PHP, ASP | 3 | 665 | 14.04.2010 12:04 stenley | | v PHP, ASP | 12 | 1500 | 25.08.2008 22:17 tomxi | | v PHP, ASP | 1 | 897 | 05.11.2007 16:04 GoodWill | | v Operačné systémy Microsoft | 4 | 566 | 18.01.2017 20:35 Miso122 | | v Assembler, C, C++, Pascal, Java | 2 | 1711 | 09.11.2012 8:54 fista1 | | v Databázy | 2 | 432 | 18.02.2013 20:51 neopagan | | v Redakčné systémy | 5 | 535 | 30.03.2007 7:17 altt | | v Databázy | 5 | 1567 | 06.09.2008 18:38 rooobertek | | v Databázy | 4 | 739 | 16.06.2009 23:06 Snacker |
|