Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Problem z zapytaniem
Forum PHP.pl > Forum > Przedszkole
krzesik
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 )
woxala123
Ale z tego zapytania wynika że wyświetlasz userów które maja puste pole
krzesik
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?
woxala123
  1. SELECT * FROM komunikaty LEFT JOIN potwierdzenia ON komunikaty.idkom = potwierdzenia.idkom
  2. WHERE komunikaty.potwierdzeniekom IS NULL
  3.  

Spróbuj tak
krzesik
gdzie w tym zapytaniu kontroluję czy ja go już czytałem czy też nie?
borabora
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
krzesik
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


borabora
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
krzesik
dziękuję, dokładnie o to mi chodziło
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.