yalus
22.02.2016, 23:25:20
Witam,
nie radzę sobie z pewnym problemem, może ktoś zasugerować rozwiązanie
tabela z wiadomościami:
---------------------------------
odbiorac | nadawca | flaga |
---------------------------------
w której znajdują się rekordy
1 | 2 | 0
1 | 2 | 0
1 | 2 | 0
5 | 6 | 0
5 | 6 | 0
5 | 6 | 0
zapytanie
select * from tabela group by odbiorca , nadawca
wynik będzie taki:
1 | 2 | 0
5 | 6 | 0
i tu sie zaczyna problem, jak skonstruować zapytanie tak aby w przypadku gdy np jeden z rekordów ma flagę ustawioną na 1 np
1 | 2 | 0
1 | 2 | 1
1 | 2 | 0
5 | 6 | 0
5 | 6 | 0
5 | 6 | 0
dał taki wynik:
5 | 6 | 0
czyli dalej pogrupować rekordy wg odbiorcy i nadawcy ale pominąć grupę rekordów jak wystąpi w niej chociaż raz flaga 1
jak powyzej, w tabeli znajdują się 3 rekordy 1 | 2 ale tylko jeden ma flage ustawioną na 1 i to ma spowodować że cała grupa rekordów 1 | 2 ma zostać pominięta w wyniku
czy da się to jakoś zrobić
z góry dzięki
pozdrawiam
Pyton_000
23.02.2016, 07:28:26
Spróbuj dodać
having count(1) = 0@trueblue dał poprawne rozw.
trueblue
23.02.2016, 08:41:55
select * from tabela group by odbiorca,nadawca having sum(flaga)=0
yalus
23.02.2016, 11:51:51
super ogromne dzięki
a jak by zmodyfikować to zapytanie aby wynik dał zawsze rekordy bez duplikatów odbiorcy
tabela zawiera takie rokordy:
1 | 2 | 0
1 | 2 | 1
1 | 2 | 0
5 | 6 | 0
5 | 6 | 0
5 | 6 | 0
1 | 3 | 0
1 | 3 | 0
1 | 4 | 0
1 | 4 | 0
i w wyniku nie chce miec tych grup które mają przynajmniej jedną flagę ustawioną na 1 ( tak jak podałeś w poprzedniej odpowiedzi) ale dodatkowo chciałbym w wyniku otrzymać rekordy bez duplikatów odbiorcy, coś takiego:
5 | 6 | 0
1 | 3 | 0
wynik nie uwzględnia rekordu 1 | 4 | 0 bo już jest jeden rekord z nadawcą 1
albo
5 | 6 | 0
1 | 4 | 0
wynik nie uwzględnia rekordu 1 | 3 | 0 bo już jest jeden rekord z nadawcą 1
i tak dalej bez znaczenia ile jest tych rekordów, wynik ma podawać tylko jeden rekord z nadawcą (bez duplikatów) ?
z góry dzięki
pozdrawiam
trueblue
23.02.2016, 11:59:28
Czyli nie interesuje Cię nadawca?
SELECT * FROM tabela GROUP BY odbiorca HAVING sum(flaga)=0
yalus
23.02.2016, 12:38:56
dzięki za odpowiedź
interesuje mnie i odbiorca i nadawca
mając taką tabele
1 | 2 | 0
1 | 2 | 1
1 | 3 | 0
1 | 3 | 0
1 | 4 | 0
1 | 4 | 0
1 | 4 | 0
1 | 5 | 0
1 | 5 | 0
powinienem otrzymac:
tylko jeden rekord np.
1 | y | 0
gdzie y może być 3, 4 albo 5 a ile to będzie w wyniku to dla mnie nie ma znaczenia
chyba to trzeba pogrupować wg pierwszej i drugiej kolumny, uwzglednic flage i usunac duplikaty z kolumny pierwszej ?
trueblue
23.02.2016, 12:43:22
Z tego przykładu wcale nie wynika, że uwzględniasz flagę i że interesuje Cię nadawca (dokładnie: interesuje Cię dowolny nadawca w grupie).
Po prostu wyciągnąłeś jeden rekord z grupy, takim zapytaniem:
SELECT * FROM tabela GROUP BY odbiorca
yalus
23.02.2016, 13:06:29
trudno jest opisać dokładnie o co mi chodzi
ale spróbuje jeszcze raz
tabela:
---------------------------------
nadawca | odbiorca | flaga |
---------------------------------
rekordy:
1 | 2 | 0
1 | 2 | 1
1 | 3 | 0
1 | 3 | 0
1 | 3 | 0
1 | 4 | 0
1 | 4 | 0
1 | 5 | 1
i teraz chciałbym wyciągnąć dowolnego odbiorce z grupy nadawcy przy uwzględnieniu flagi 0
wynik powinien być dokładnie tylko jeden rekord np.
1 | 3 | 0
albo
1 | 4 | 0
odbiorcy 2 i 5 muszą być pominięci bo flaga w tej grupie to 1
ogromne dzięki za dotychczasową pomoc
trueblue
23.02.2016, 13:22:59
SELECT nadawca,odbiorca FROM(
SELECT nadawca,odbiorca FROM tabela GROUP BY odbiorca,nadawca HAVING sum(flaga)=0
) AS tmp
GROUP BY nadawca
yalus
23.02.2016, 13:41:20
super!
ogromne dzięki, nawet mi takie rozwiązanie błysło w myślach ale nie poszedłem tym tropem
myślałem żeby wynik z pierwszego zapytania załadować do tablicy php i tam usunąc te duplikaty

)
dzięki jeszcze raz
pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.