Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL]problem z zapytaniem MYSQL
krzesik
post 30.04.2019, 20:09:07
Post #1





Grupa: Zarejestrowani
Postów: 476
Pomógł: 1
Dołączył: 25.08.2012

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


Witam
mam problem z poprawną konstrukcją zapytania
mam dwie tablice:
[info]
id_info, tresc, data_do, woj, potwierdzenie
oraz drugą
[PotwierdzeniaKomunikatow]
idKomunikatu, imie_nazwisko, id_info, data_potwierdzenia

informacje mogą dotyczyć kilku województw jednocześnie, więc może występować jedna informacja dla kilku województw z czasem zakończenia identycznym (data_do)

mam tabelę gdzie widzę ilość osób które przeczytały komunikat zgrupowany ze wszystkich wojew.
  1. SELECT id_info, count(DISTINCT(imie_nazwisko)) AS ilosc, info, data_do, id_info, woj FROM
  2. (
  3. SELECT * FROM info LEFT JOIN PotwierdzeniaKomunikatow ON info.id_info = PotwierdzeniaKomunikatow.IdKomunikatu WHERE potwierdzenie='1'
  4. ) AS tab1
  5. GROUP BY info, data_do
  6. ORDER BY id_info DESC

to działa mi dobrze, ale chciałbym otrzymać listę osób które przeczytały informację
Go to the top of the page
+Quote Post
trueblue
post 30.04.2019, 20:26:32
Post #2





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Dlaczego łączysz tabele po polach:
  1. info.id_info = PotwierdzeniaKomunikatow.IdKomunikatu

a nie id_info?

Skąd się wzięło pole info w klauzuli GROUP BY?


--------------------
Go to the top of the page
+Quote Post
krzesik
post 30.04.2019, 20:42:01
Post #3





Grupa: Zarejestrowani
Postów: 476
Pomógł: 1
Dołączył: 25.08.2012

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


oczywiście powinno być tresc
Go to the top of the page
+Quote Post
Kshyhoo
post 30.04.2019, 20:49:38
Post #4





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




To samo uzyskasz zapytaniem:
  1. SELECT id_info, count(DISTINCT(imie_nazwisko)) AS ilosc, data_do, woj, tresc
  2. FROM info
  3. LEFT JOIN PotwierdzeniaKomunikatow ON info.id_info = PotwierdzeniaKomunikatow.IdKomunikatu WHERE potwierdzenie='1'
  4. GROUP BY id_info, data_do
  5. ORDER BY id_info DESC

A nazwisko wystarczy dołączyć:
  1. SELECT id_info, count(DISTINCT(imie_nazwisko)) AS ilosc, data_do, woj, tresc, imie_nazwisko
  2. FROM info
  3. LEFT JOIN PotwierdzeniaKomunikatow ON info.id_info = PotwierdzeniaKomunikatow.IdKomunikatu WHERE potwierdzenie='1'
  4. GROUP BY id_info, data_do
  5. ORDER BY id_info DESC

Chyba, że nie zrozumiałem dobrze...


--------------------
Go to the top of the page
+Quote Post
krzesik
post 30.04.2019, 20:54:44
Post #5





Grupa: Zarejestrowani
Postów: 476
Pomógł: 1
Dołączył: 25.08.2012

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


nie, chodzi mi o listę nazwisk które odczytały wiadomość o tej samej treści, ale dla różnych województw
Go to the top of the page
+Quote Post
Kshyhoo
post 30.04.2019, 20:56:58
Post #6





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Pokaż przykładowe dane, po kilka z każdej z tabel.


--------------------
Go to the top of the page
+Quote Post
krzesik
post 30.04.2019, 21:13:55
Post #7





Grupa: Zarejestrowani
Postów: 476
Pomógł: 1
Dołączył: 25.08.2012

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


[info]
id_info, tresc, data_do, woj, potwierdzenie
1, będzie wiało, 2019-05-05, opolskie, 1
2, będzie wiało, 2019-05-05, pomorskie, 1
3, będzie padać, 2019-05-05, opolskie, 1
4, będzie bardzo padać, 2019-05-05, opolskie, 1

[PotwierdzeniaKomunikatow]
idKomunikatu, imie_nazwisko, id_info, data_potwierdzenia
1, kowalski adam, 1, 2019-04-30
2, maliniak stefan, 1, 2019-04-29
3, czereśniak karol, 1, 2019-04-30
4, kowalski adam, 2, 2019-04-29
5, kowalski adam, 3, 2019-04-30
6, kowalski adam, 4, 2019-04-29
7, maliniak stefan, 3, 2019-04-30



Go to the top of the page
+Quote Post
Kshyhoo
post 30.04.2019, 21:21:48
Post #8





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




A to potwierdzenie to informacja o odebraniu wiadomości czy o tym, że będzie miało miejsce zdarzenie?


--------------------
Go to the top of the page
+Quote Post
krzesik
post 30.04.2019, 21:23:05
Post #9





Grupa: Zarejestrowani
Postów: 476
Pomógł: 1
Dołączył: 25.08.2012

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


potwierdzenie odczytania
Go to the top of the page
+Quote Post
Kshyhoo
post 30.04.2019, 21:24:39
Post #10





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




W takim razie, uważam, że miejsce trzymania tej informacji jest niepoprawne. Powinno być w tabeli z potwierdzeniem...


--------------------
Go to the top of the page
+Quote Post
krzesik
post 30.04.2019, 21:37:37
Post #11





Grupa: Zarejestrowani
Postów: 476
Pomógł: 1
Dołączył: 25.08.2012

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


Niestety tak już mam, da się coś wymyślić w takim układzie?
Go to the top of the page
+Quote Post
Kshyhoo
post 30.04.2019, 21:46:25
Post #12





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Nic sensownego, bo niby jak? Twoje potwierdzenie oznacza, wiadomość jest odczytana, ale nie masz informacji, kto odczytał. W Twoim rozwiązaniu trzeba by powielać rekordy w tabeli z potwierdzeniami i wydaje mi się, że właśnie tak robisz...

  1. SELECT info.id_info, count(DISTINCT(imie_nazwisko)) AS ilosc, data_do, woj, tresc, imie_nazwisko, idKomunikatu
  2. FROM info
  3. LEFT JOIN PotwierdzeniaKomunikatow ON info.id_info=PotwierdzeniaKomunikatow.IdKomunikatu WHERE potwierdzenie='1'
  4. GROUP BY PotwierdzeniaKomunikatow.id_info, data_do
  5. ORDER BY id_info DESC


EDIT: dodałem idKomunikatu, dla sprawdzenia, co pobiera.


--------------------
Go to the top of the page
+Quote Post
krzesik
post 30.04.2019, 21:55:46
Post #13





Grupa: Zarejestrowani
Postów: 476
Pomógł: 1
Dołączył: 25.08.2012

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


Pole potwierdzenie w tabeli info jast wyłącznie informacją że ta wiadomość musi być potwierdzona że user przeczytał. Samym potwierdzeniem przeczytania jest rekord w tabeli PotwierdzeniaKomunikatow
Go to the top of the page
+Quote Post
Kshyhoo
post 30.04.2019, 22:03:42
Post #14





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




O to chodziło?


--------------------
Go to the top of the page
+Quote Post
krzesik
post 30.04.2019, 22:16:04
Post #15





Grupa: Zarejestrowani
Postów: 476
Pomógł: 1
Dołączył: 25.08.2012

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


dalej w wyniku mam sume potwierdzeń, a potrzebuje nazwiska
Go to the top of the page
+Quote Post
Kshyhoo
post 30.04.2019, 22:36:03
Post #16





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Dziwne, bo ja mam tak:
  1. id_info ilosc data_do woj tresc imie_nazwisko idKomunikatu
  2. 2 2 2019-05-05 00:00:00 pomorskie będzie wiało maliniak stefan 2
  3. 1 2 2019-05-05 00:00:00 opolskie będzie wiało kowalski adam 1


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 10:42