Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]problem z zapytaniem MYSQL
Forum PHP.pl > Forum > Przedszkole
krzesik
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ę
trueblue
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?
krzesik
oczywiście powinno być tresc
Kshyhoo
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...
krzesik
nie, chodzi mi o listę nazwisk które odczytały wiadomość o tej samej treści, ale dla różnych województw
Kshyhoo
Pokaż przykładowe dane, po kilka z każdej z tabel.
krzesik
[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



Kshyhoo
A to potwierdzenie to informacja o odebraniu wiadomości czy o tym, że będzie miało miejsce zdarzenie?
krzesik
potwierdzenie odczytania
Kshyhoo
W takim razie, uważam, że miejsce trzymania tej informacji jest niepoprawne. Powinno być w tabeli z potwierdzeniem...
krzesik
Niestety tak już mam, da się coś wymyślić w takim układzie?
Kshyhoo
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.
krzesik
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
Kshyhoo
O to chodziło?
krzesik
dalej w wyniku mam sume potwierdzeń, a potrzebuje nazwiska
Kshyhoo
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
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.