Autor | Zpráva | ||
---|---|---|---|
jannek Profil |
Ahoj všem, doufám, že mi pomůžete. Řeším takový problém, který se mi nedaří rozseknout.
Mám DB pohled, ze kterého potřebuji vytáhnout jenom ty záznamy, které odpovídají zvolené sadě hodnot. Data pohledu vypadají přibližně takto (vynechávám nepotřebné sloupce): | id | name | from | to | 1 | John | A | B | 2 | Jack | A | B | 2 | Jack | B | A | 2 | Jack | B | A | 2 | Jack | B | A | 2 | Jack | C | D | 3 | Mike | C | D | 3 | Mike | C | D | 3 | Mike | C | B ... A potřebuji vytáhnout záznamy (duplicitní řádky slučuji pomocí GROUP BY), kde hodnoty ve sloupcích from a to odpovídají dvojicím (A, B) a (C, D) , tj. výsledkem by měl být jeden řádek s ID 2.
Samotné řádky from a to v resultu nepotřebuji, ale potřebuji podle nich vyfiltrovat data. Došel jsem k příkazu:
SELECT id, name FROM view WHERE (from = A AND to = B) OR (from = C AND to = D) GROUP BY id, name Ale to mi zahrne do výsledku i řádky s ID 1 a 3. A nevím pomocí čeho ty nechtěné řádky vyhodit pryč. Zkoušel jsem různě googlit, ale k ničemu jsem se nedopracoval. Díky všem. PS. název tématu asi není zrovna vypovídající, ale lepší jsem nevymyslel. |
||
Kajman Profil |
Přidejte na konec
HAVING count(distinct ("from","to"))=2 |
||
jannek Profil |
#3 · Zasláno: 6. 11. 2014, 07:01:17
Děkuju mnohokrát. Vypadá, že to funguje.
|
||
Časová prodleva: 5 měsíců
|
|||
jannek Profil |
#4 · Zasláno: 27. 3. 2015, 13:22:00
Omlouvám se, že vytahuji toto starší téma, ale příjde mi to lepší než zakládat nové.
Potřebuji řešení uvedené výše upravit tak, aby zvládalo i neúplné rozsahy, tj. místo (A, B) a (C, D) , zvládlo i (A, B) a (C, -) - aby zkrátka zahrnulo všechny uživatele, kteří mají dvojici (A, B) a zároveň C s libovolnou další hodnotou.
Mělo by to zvládat i kombinace typu (-, B) a (C, -) , nebo jen samotný (-, B) .
Bohužel se mi nedaří dobrat správného výsledku, zkoušel jsem SQL různě upravovat, sestavovat ho podmíněně v PHP apod. Věděl by někdo? Díky. |
||
Kajman Profil |
#5 · Zasláno: 27. 3. 2015, 15:09:47
Asi bych rozdělil dotaz až na tři poddotazy, kdy se hledají páry, jen from nebo jen to. A to celé ještě zgroupovat a ošetřit, že se našlo ve všech poddotazech.
Pro (A, B) a (C, -) tedy něco jako select id, name from ((SELECT id, name, 'oboje' druh_hledani FROM view WHERE (from = A AND to = B) GROUP BY id, name HAVING count(distinct "from", "to")) = 1) union all (SELECT id, name, 'jenfrom' druh_hledani FROM view WHERE (from = C) GROUP BY id, name HAVING count(distinct "from")) = 1) ) x group by id, name having count(*) = 2 -- dva druhy hledani |
||
tiso Profil |
#6 · Zasláno: 27. 3. 2015, 15:20:46
jannek: nerozumiem čo presne chceš dosiahnuť. Vyzerá to na GROUP_CONCAT, ale radšej lepšie popíš čo chceš a pridaj aj vzorové dáta.
|
||
Časová prodleva: 10 let
|
0