Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pominięcie rekordów z zapytania GROUP by
Forum PHP.pl > Forum > Bazy danych > MySQL
yalus
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
Spróbuj dodać having count(1) = 0

@trueblue dał poprawne rozw. smile.gif
trueblue
select * from tabela group by odbiorca,nadawca having sum(flaga)=0
yalus
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
Czyli nie interesuje Cię nadawca?

  1. SELECT * FROM tabela GROUP BY odbiorca HAVING sum(flaga)=0
yalus
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
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:
  1. SELECT * FROM tabela GROUP BY odbiorca
yalus
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
  1. SELECT nadawca,odbiorca FROM(
  2. SELECT nadawca,odbiorca FROM tabela GROUP BY odbiorca,nadawca HAVING sum(flaga)=0
  3. ) AS tmp
  4. GROUP BY nadawca
yalus
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 wink.gif) oneeyedsmiley02.png

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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.