Autor | Zpráva | ||
---|---|---|---|
slon_cz Profil |
Dobrý den, chystám jednu funkci a potřeboval bych poradit.
v databázi mám tabulku "table" s obsahem: uzivatel_id | skupina_id | datum | id 4754 | F748 | X | 1 475 | C447 | X | 2 47 | A800 | X | 3 4 | F748 | X | 4 a já potřebuji na stránce vypsat všechny záznamy, kde v tabulce se se sloupeckem skupina_id shoduje 2 a vice zaznamu, tedy aby se mi na strance vypsala jen skupina "F748" a podtim zaznam s id 1 a 4, je to možné udělat v jednom záznamu? Můj nápad byl, že jakmile bch vyřešil to vypisování, tak záznamy pdo každou skupinou bych udělal zvlášť, mělo by to vlastní sql dotaz "WHERE skupina_id='".$skupina."'" podle prvniho dotazu, kde by mi prvni dotaz vypsal ty zaznamy, kde jsou vice, jak 2 zaznamy se shodnym skupina_id, bohuzel na ten prvni dotaz nemohu nijak prijit, jak ho napsat. Budu rad za jakoukoliv radu, dekuji a preji hezky zbytek dne |
||
Kajman Profil |
#2 · Zasláno: 15. 2. 2019, 13:16:07
Mělo by jít něco jako
SELECT t.* FROM (SELECT skupina_id, Count(*) pocet FROM `table` GROUP BY skupina_id HAVING Count(*) > 1) dupl JOIN `table` t ON dupl.skupina_id = t.skupina_id ORDER BY t.skupina_id, t.uzivatel_id |
||
Keeehi Profil |
#3 · Zasláno: 15. 2. 2019, 17:28:12
slon_cz:
Případně pokud databáze umí window funkce tak to jde i bez toho subdotazu a joinu. |
||
Kajman Profil |
Keeehi:
Jak bys to bez joinu i poddotazu napsal? Edit: aha, vlastně přes QUALIFY, ale to umí jen některé z těch, co umí window funkce. Snad jen teradata. |
||
slon_cz Profil |
#5 · Zasláno: 15. 2. 2019, 18:52:03
Děkuji, bohužel databáze neumí window funkce, takže to budu muset řešit skrz Kajmanuv dotaz, děkuji.
|
||
Keeehi Profil |
Já tedy nevím zda tohle spadá pod window funkce ale napsal bych to takto.
WHERE count(*) OVER (GROUP BY skupina_id) > 1 |
||
Kajman Profil |
#7 · Zasláno: 15. 2. 2019, 19:21:59
Ve where to nejde použít. Where omezuje řádky ještě před window finkcemi. Count by musel být v select části, celé to uzavřit do poddotazu a na tím výsledkem použt where.
|
||
Časová prodleva: 6 let
|
0