Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pominięcie rekordów z zapytania GROUP by
yalus
post
Post #1





Grupa: Zarejestrowani
Postów: 281
Pomógł: 0
Dołączył: 8.07.2005
Skąd: EU

Ostrzeżenie: (0%)
-----


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





Go to the top of the page
+Quote Post
Pyton_000
post
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Spróbuj dodać having count(1) = 0

@trueblue dał poprawne rozw. (IMG:style_emoticons/default/smile.gif)

Ten post edytował Pyton_000 23.02.2016, 09:00:42
Go to the top of the page
+Quote Post
trueblue
post
Post #3





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


select * from tabela group by odbiorca,nadawca having sum(flaga)=0
Go to the top of the page
+Quote Post
yalus
post
Post #4





Grupa: Zarejestrowani
Postów: 281
Pomógł: 0
Dołączył: 8.07.2005
Skąd: EU

Ostrzeżenie: (0%)
-----


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


Go to the top of the page
+Quote Post
trueblue
post
Post #5





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Czyli nie interesuje Cię nadawca?

  1. SELECT * FROM tabela GROUP BY odbiorca HAVING sum(flaga)=0
Go to the top of the page
+Quote Post
yalus
post
Post #6





Grupa: Zarejestrowani
Postów: 281
Pomógł: 0
Dołączył: 8.07.2005
Skąd: EU

Ostrzeżenie: (0%)
-----


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 ?

Ten post edytował yalus 23.02.2016, 12:39:31
Go to the top of the page
+Quote Post
trueblue
post
Post #7





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
yalus
post
Post #8





Grupa: Zarejestrowani
Postów: 281
Pomógł: 0
Dołączył: 8.07.2005
Skąd: EU

Ostrzeżenie: (0%)
-----


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








Go to the top of the page
+Quote Post
trueblue
post
Post #9





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


  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


Ten post edytował trueblue 23.02.2016, 13:23:07
Go to the top of the page
+Quote Post
yalus
post
Post #10





Grupa: Zarejestrowani
Postów: 281
Pomógł: 0
Dołączył: 8.07.2005
Skąd: EU

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/wink.gif) ) (IMG:style_emoticons/default/oneeyedsmiley02.png)

dzięki jeszcze raz

pozdrawiam
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 19:03