Forum » Programiranje » MYSQL vprašanje
MYSQL vprašanje
l0g1t3ch ::
Sedaj imam narejen SQL stavek ki za nek ID skupine poišče zadnje tri vnose za to skupino, ker pa je skupin več vse skupaj izvajam v zanki kjer menjam ID in izvajam sql da grem čez vse skupine.
Pa me zanima če se da to stlačit v en sam SQL da bi za vsako od skupin poiskal zadnje 3 vnose.
Hvala
Pa me zanima če se da to stlačit v en sam SQL da bi za vsako od skupin poiskal zadnje 3 vnose.
Hvala
- spremenilo: l0g1t3ch ()
l0g1t3ch ::
SELECT * FROM tabela WHERE id = nekaCifra ORDER BY created DESC LIMIT 3;
In to zdej izvajam v for zanki vsakič drug id da grem vse id-je čez. Verjetno pa obstaja boljša/lepša rešitev.
l0g1t3ch ::
Kakšna je razlika med tem:
FROM tabela1, tabela2, tabela3
in tem:
FROM tabela1
JOIN tabela2 ON ...
JOIN tabela3 ON ...
FROM tabela1, tabela2, tabela3
in tem:
FROM tabela1
JOIN tabela2 ON ...
JOIN tabela3 ON ...
schtr4jh ::
SELECT * FROM tabela1 t1, tabela t2, tabela t3 WHERE t1.id = t2.id AND t2.id = t3.id
naredi enako, kot
SELECT * FROM tabela t1 INNER JOIN tabela2 t2 ON t1.id = t2.id INNER JOIN tabela3 t3 ON t2.id = t3.id
Pazi na where stavek v prvem queryu.
Če pa where stavka ni, dobiš dejansko povezane vse vrednosti za vsemi vrednostmi iz ostalih tabel, ker ne določiš, glede na kaj se naj "joinajo".
naredi enako, kot
SELECT * FROM tabela t1 INNER JOIN tabela2 t2 ON t1.id = t2.id INNER JOIN tabela3 t3 ON t2.id = t3.id
Pazi na where stavek v prvem queryu.
Če pa where stavka ni, dobiš dejansko povezane vse vrednosti za vsemi vrednostmi iz ostalih tabel, ker ne določiš, glede na kaj se naj "joinajo".
unit3d ::
Pozdrav, imam en čist banalen problem, ki ga rešujem že celo popoldne, pa še kr nisem prišel do rešitve. Napisati poskušam sql povpraševanje, ki iz neke določene tabele izloči id, ki se pojavi največkrat ter potem iz druge tabele prebere podatke, ki so vezani na ta id. Moja težava je, da se zgubim že pri izpisu tistega id-ja v prvi tabeli.
MrBrdo ::
unit3d:
ups narobe zastopil vprašanje :P PS: mal maš čudno poimenovanje, po vsej logiki bi se moral isti "id" pojavit samo 1x...
mogoče bi kej takega delal:
SELECT id, COUNT(id) as NumOccuernces FROM table GROUP BY id ORDER BY NumOccuernces DESC LIMIT 1
si pa upam rečt da obstaja boljši način
da vzameš podatke še iz neke druge tabele bi potem verjetno moral nest-at query al bi pa šlo celo kej v tem smislu (sam bi blo pomoje počasnejše):
SELECT t1.id, t2.polje1, t2.polje2, COUNT(t1.id) as NumOccuernces FROM table AS t1 LEFT JOIN table2 as t2 ON t1.id = t2.id GROUP BY id ORDER BY NumOccuernces DESC LIMIT 1
ups narobe zastopil vprašanje :P PS: mal maš čudno poimenovanje, po vsej logiki bi se moral isti "id" pojavit samo 1x...
mogoče bi kej takega delal:
SELECT id, COUNT(id) as NumOccuernces FROM table GROUP BY id ORDER BY NumOccuernces DESC LIMIT 1
si pa upam rečt da obstaja boljši način
da vzameš podatke še iz neke druge tabele bi potem verjetno moral nest-at query al bi pa šlo celo kej v tem smislu (sam bi blo pomoje počasnejše):
SELECT t1.id, t2.polje1, t2.polje2, COUNT(t1.id) as NumOccuernces FROM table AS t1 LEFT JOIN table2 as t2 ON t1.id = t2.id GROUP BY id ORDER BY NumOccuernces DESC LIMIT 1
MrBrdo
Zgodovina sprememb…
- spremenilo: MrBrdo ()
unit3d ::
Aja, pozabil sem napisati, da naj ne bi uporabljal besede "LIMIT", ampak mora biti cel query napisan s pomočjo MAX,COUNT,ORDER BY,GROUP BY,etc.
Razumem, da bo treba gnezdit, vendar želim rešiti ta del. Vsaj kolikor se meni zdi, bo treba tukaj napisati vsaj 3 povpraševanja v enem.
Razumem, da bo treba gnezdit, vendar želim rešiti ta del. Vsaj kolikor se meni zdi, bo treba tukaj napisati vsaj 3 povpraševanja v enem.
Zgodovina sprememb…
- spremenil: unit3d ()
MrBrdo ::
unit3d: zakaj pa nočeš z LIMIT?
nevem, lah probaš tko:
SELECT id, COUNT(id) AS cnt FROM table GROUP BY id HAVING (cnt = MAX(cnt))
al pa
SELECT id FROM table GROUP BY id HAVING (COUNT(id) = MAX(COUNT(id)))
nisem ziher če bo to šlo skozi
če hočeš samo 1 rezultat lahko probaš takoj za select dodat še DISTINCT čeprav to lah vse skupaj pokvari :) v glavnem mal moraš probat
nevem, lah probaš tko:
SELECT id, COUNT(id) AS cnt FROM table GROUP BY id HAVING (cnt = MAX(cnt))
al pa
SELECT id FROM table GROUP BY id HAVING (COUNT(id) = MAX(COUNT(id)))
nisem ziher če bo to šlo skozi
če hočeš samo 1 rezultat lahko probaš takoj za select dodat še DISTINCT čeprav to lah vse skupaj pokvari :) v glavnem mal moraš probat
MrBrdo
Zgodovina sprememb…
- spremenilo: MrBrdo ()
unit3d ::
Celotno zadevo bi naj naredil po primerih, ki so mi bili dani na faksu, vendar so vsa povpraševanja narejena veliko bolj komplicirano kot bi lahko bila.
V bistvu mi nič od tega ne gre skozi ali pa jaz delam kje napako.
V bistvu mi nič od tega ne gre skozi ali pa jaz delam kje napako.
Zgodovina sprememb…
- spremenil: unit3d ()
MrBrdo ::
nevem no sigurno je z limit to daleč najlažje narest pa verjetno tut najboljše
anyway:
SELECT MAX(cnt) AS a FROM (SELECT COUNT(id) AS cnt FROM table GROUP BY id) AS b
anyway:
SELECT MAX(cnt) AS a FROM (SELECT COUNT(id) AS cnt FROM table GROUP BY id) AS b
MrBrdo
Zgodovina sprememb…
- spremenilo: MrBrdo ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [SQL] Unikatni izpisiOddelek: Programiranje | 2210 (1597) | 111111111111 |
» | [SQL] - združitev glede na iste vrednostiOddelek: Programiranje | 1385 (1027) | tx-z |
» | [SQL] PgAdmin preprosto vprasanje povezano s stolpci v tabeliOddelek: Programiranje | 2191 (1550) | Cvele2011 |
» | [Mysql]počasen rand in rešitveOddelek: Izdelava spletišč | 1314 (1071) | Tody |
» | [SQL] InsertOddelek: Programiranje | 2066 (1668) | greentech |