![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 1 Dołączył: 4.05.2019 Skąd: PHP5.6 Ostrzeżenie: (0%) ![]() ![]() |
Posiadam dwie tabele, które są ze sobą powiązane za pomocą kolumny rodzaj:
1. powiadomienia - id (id zalogowanego usera) - rodzaj (to id-powiadomienia z tabeli nr2) 2. powiadomienia-tresc - idpow (to id-rodzaj z tabeli nr1) - tresc (tresc powiadomienia) Napisałem też skrypt PHP, który w dwóch zagnieżdżeniach poprawnie wyświetla wszystkie dane dla usera z danym ID.
Wszystko działa jak należy, ale czy to jest prawidłowa logika wyświetlania danych w taki sposób? Czy jest lepsza metoda? Moja wiedza z zakresu PHP zatrzymała się kilkanaście lat temu na wersji 5.6.28, a teraz hobbystycznie działam na PHP 5.6.40 Za komentarze wielkie dzięki! Ten post edytował phpuser88 17.02.2022, 16:38:04 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Problem nie ma zwiazku z php. Zapytanie ma byc jedno z uzyciem LEFT JOIN. Teraz zas w petli generujesz mase zapytan zamiast jednego i koniec.
No i naprawde moglbys ponazywac jakos logicznie te pola w tabelach bo teraz to nie ma zadnego sensu ![]()
Powód edycji: [nospor]:
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]() ![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 1 Dołączył: 4.05.2019 Skąd: PHP5.6 Ostrzeżenie: (0%) ![]() ![]() |
Staram się ogarnąć LEFT JOIN w PhpMyAdmin i korzystałem ze wzoru, który powinien funkcjonować, a jednak nie działał...
![]() Problemem była nazwa tabeli, która po 40min. została zmieniona na powiadomienia_tresc... ![]() Ostatecznie doszedłem do czegoś takiego: Teraz problemem jest wyświetlanie wartości "NULL", gdy tabela `powiadomienia` posiada więcej wyników niż `powiadomienia_tresc`. Jak to rozwiązać? Tak to wygląda: ![]() |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Nie lepiej nazwać obydwie kolumny "rodzaj" albo "idpow"? Czy wziąłeś pod uwagę, że zmiana treści powiadomienia spowoduje zmianę tych treści dla każdego użytkownika nawet jeśli powiadomienie zostało wysłane wcześniej niż zmiana treści? -------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 1 Dołączył: 4.05.2019 Skąd: PHP5.6 Ostrzeżenie: (0%) ![]() ![]() |
omg... totalnie zapomniałem o prostym warunku WHERE.
@trueblue, w założeniu miały to być powiadomienia ogólne, jednakowe dla wszystkich. Myślę jak rozwiązać powiadomienia indywidualne gdzie będzie np. indywidualny link i dochodzę do wniosku, że obecna struktura jest strzałem w kolano... ![]() Myślę, aby wywalić tabele `powiadomienia_tresc`, a tabele `powiadomienia` zmodyfikować, aby PHP wrzucało indywidualny komunikat dla określonego ID, a później odczytywać jednym, prostym zapytaniem. To będzie chyba najrozsądniejsze rozwiązanie. Co do nazwy kolumn, to wcześniej nazwa była jednakowa i miałem problem z jakimś zapytaniem, dlatego zmieniłem na różniące się od siebie zamiast tracić czas na dochodzenie, którego mi niestety nie brak. Dziękuję za naprowadzenie. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Co do nazwy kolumn, to wcześniej nazwa była jednakowa i miałem problem z jakimś zapytaniem, dlatego zmieniłem na różniące się od siebie zamiast tracić czas na dochodzenie, którego mi niestety nie brak. Jak masz takie same kolumny w kilku tabelach to dobierajac sie do kolumny masz poprzedzic ja nazwa tabeli, np: tabela1.kolumna tabela2.kolumna tabela3.kolumna wowczas mysql nie bedzie ci plul bledem Jesli chcesz miec i powiadomienia ogolne, i powiadomienia do konkretnego uzytkownika to jedna tabela ale: POWIADOMIENIA: id_uzytkownik tresc I juz ![]() Jesli powiadomienie jest do konkretnego uzytkownika to w id_uzytkownik wstawiasz ID uzytkownika. Jesli powiadomienie jest ogolne do wszystkich, to w id_uzytkownik wstawiasz NULL i po sprawie. Oczywiscie mozesz to rozbudowac i dodac czas waznosci, priorytet, typ itp. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 1 Dołączył: 4.05.2019 Skąd: PHP5.6 Ostrzeżenie: (0%) ![]() ![]() |
Taaak, już doczytałem że lepiej poprzedzać kolumny nazwą tabeli, dzięki.
Powiadomienia rozbudowałem o typ, widocznosc i date, ale nie wpadł mi do głowy elegancki pomysł z NULL. ![]() Teraz zastanawiam się jak ograniczyć ilość zapytań do bazy i pierwszą myślą było rozwiązanie typu: 1. ciastko=0 > zapytaj SQL > pokaż wyniki + daj ciastko=1 i podoba mi się to rozwiązanie, bo mógłbym ciastko resetować co 5min. i mieć aktualne dane ograniczając kilka-kilkanaście zapytań co każde odświeżenie strony, ALE niestety wyniki SQL nie zostaną samodzielnie zapisane po jednokrotnym wyświetleniu... ![]() Myślę by stworzyć tablice sesyjną i tam wpakować wyniki - to dobry pomysł? (sorry za oftop) |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Mozna miec cache i z tego korzystac. Sam kiedys nagminnie stosowalem cache. Teraz juz nie widze takiego sensu by stosowac cache do takich pierdulek jak twoje powiadomienia. Toz to pare milisekund odczytu. Zakldam ze baza ma indeksy itp.
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 09:20 |