Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL]Problem z zapytaniem
krzesik
post 12.03.2017, 16:41:30
Post #1





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

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


Witam, mam problem z zapytaniem

mam dwie tabele:
- komunikaty (tutaj mam wszystki komunikaty)
idkom, tresckom, datakom, potwierdzeniekom

oraz
- potwierdzenia( tutaj zapisuję kto potwierdzil przeczytanie)
idpotw, datapotw, imie_nazwisko, idkom

chciałbym wyświetlić wszystkie komunikaty wymagające potwierdzenia, których jeszcze zalogowany user nie przeczytał. Robię to tak ale coś mi nie idzie...
  1. SELECT * FROM komunikaty LEFT JOIN potwierdzenia ON komunikaty.idkom = potwierdzenia.idkom
  2.  
  3. WHERE komunikaty.potwierdzeniekom = '1' AND (potwierdzenia.imie_nazwisko IS NULL )
Go to the top of the page
+Quote Post
woxala123
post 12.03.2017, 16:46:25
Post #2





Grupa: Zarejestrowani
Postów: 361
Pomógł: 12
Dołączył: 9.01.2010

Ostrzeżenie: (10%)
X----


Ale z tego zapytania wynika że wyświetlasz userów które maja puste pole
Go to the top of the page
+Quote Post
krzesik
post 12.03.2017, 16:50:33
Post #3





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

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


więc jak być powinno? przecież gdybym wiedział to nie zakładałbym wątku.
Ale po koleji
najpierw szukam czy są komunikaty z potwierdzeniem
select * from komunikaty where potwierdzenie = '1'

teraz muszę połączyć/sprawdzić czy ja jako zalogowany user już go czytałem czy też nie

select * from potwierdzenia where imie_nazwisko like 'MojeNazwisko' and idkom .....questionmark.gifquestionmark.gif?
Go to the top of the page
+Quote Post
woxala123
post 12.03.2017, 16:55:08
Post #4





Grupa: Zarejestrowani
Postów: 361
Pomógł: 12
Dołączył: 9.01.2010

Ostrzeżenie: (10%)
X----


  1. SELECT * FROM komunikaty LEFT JOIN potwierdzenia ON komunikaty.idkom = potwierdzenia.idkom
  2. WHERE komunikaty.potwierdzeniekom IS NULL
  3.  

Spróbuj tak
Go to the top of the page
+Quote Post
krzesik
post 12.03.2017, 17:13:36
Post #5





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

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


gdzie w tym zapytaniu kontroluję czy ja go już czytałem czy też nie?
Go to the top of the page
+Quote Post
borabora
post 12.03.2017, 18:45:16
Post #6





Grupa: Zarejestrowani
Postów: 116
Pomógł: 33
Dołączył: 8.09.2014

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


dziwnie skonstruowana baza. Z Twoich tabel wynika, że to są jakieś ogólne komunikaty do wszystkich userów, a nie jakieś indywidualne. W takim razie po co kolumna "komunikaty.potwierdzenieko" wystarczy Ci aby ktokolwiek go potwierdził? Jeśli nie to kolumna jest do wywalenia. powinieneś mieć 3 tabele:
komunikaty: idkom, tresckom, datakom
users: id, imie, nazwisko
potwierdzenie: idkom, userID, datapotwierdzenia
Go to the top of the page
+Quote Post
krzesik
post 12.03.2017, 19:06:13
Post #7





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

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


OK na tym etapie mogę jeszcze wszystko przerobić.
Generalnie mam takie założenia:
- baza z komunikatami dla wszystkich, ale pewne z nich muszą posiadać potwierdzenie przeczytania - stąd tabela potwierdzeń, oczywiście baza z userami też jest i funkcjonuje
- admin daje jakiś komunikat i ustawia flagę na "ON" - że żąda przeczytania i lecimy dalej....
loguję się do systemu, pojawia mi się modal że mam nieprzeczytaną wiadomość, np zaznaczam chceckboxa, submit insert do bazy np
  1. INSERT INTO potwierdzenia SET
  2. imie_nazwisko = '$imie_nazwisko',
  3. Idkom = '$id_kom',
  4. DataPotwierdzenia = NOW()



moim problemem jest "wyłuskanie" nieprzeczytanych komunikatów przy zalogowaniu dla danego usera


Go to the top of the page
+Quote Post
borabora
post 12.03.2017, 19:52:25
Post #8





Grupa: Zarejestrowani
Postów: 116
Pomógł: 33
Dołączył: 8.09.2014

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


zamiast
  1. imie_nazwisko = '$imie_nazwisko',

do tabeli wrzucaj userID.
po zalogowaniu zapisujesz sobie w sesji ten userID i wtedy zapytanie mogłoby wyglądać np tak (5 to id usera z sesji):
  1. SELECT k.* FROM komunikaty k
  2. LEFT JOIN potwierdzenia p ON k.idkom=p.idkom AND p.userID=5
  3. WHERE p.idkom IS NULL

jeżeli komunikaty mają miec flagę on/off to dorzucasz dodatkowy warunek do whera

Ten post edytował borabora 12.03.2017, 19:53:33
Go to the top of the page
+Quote Post
krzesik
post 12.03.2017, 20:49:42
Post #9





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

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


dziękuję, dokładnie o to mi chodziło
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: 26.04.2024 - 04:14