Autor Zpráva
tomyc
Profil *
Zdravim, chtěl bych na webu zobrazovat novinky a důležité upominky pro registrované uživatele. Potřeboval bych nasměrovat, jak ukladat do databáze. Mám tabulku uživatelů a tabulku upominek. V tabulce upominky vytvorim neco, co se ma všem zobrazit. Kdo si informaci přečte, zaškrtne příště nezobrazovat. Jak do těchto tabulek co nejefektivněji zanést komu se již informace zobrazila a komu ne. Me reseni by bylo ke kazde informaci v tabulce upominky přidat sloupec precteno a do něj ukladat id uživatele s nějakým oddelovacem, který již informaci videl. Nevím ale jestli při vyšším počtu upominek v tabulce nebude dotaz příliš pomalý. Musel bych pokazde projít celou tabulku a vybrat řádky, kde není ID přihlášeného uživatele. Nejedna se o žádný velký web. Max 60 uživatelů. Pokud mate někdo lepsi řešení prosím napiste. Děkuji
peta
Profil
tab zobrazeno
- typ = 1, 2, 3 (upominka, nove zpravy, ...) (index)
- id_typu = id upominky (index)
- id_uzivatele (index)
SELECT * FROM zobrazeno WHERE typ=1 AND id_uzivatele=5 LIMIT 1
Do milion radku je to naprosto v klidu. Jeste tam muzes pridat datum pridani, abys to pak mohl promazat, treba. LIMIT 1 je pro jednu upominku, aby nehledal zbytecne vsechny.
Sir Tom
Profil
tomyc:
Také zdravím:

Takto:

tab1:
uzivatele
id, jmeno, ....

tab2:
zprava
id, obsah, ...

tab3:
zprava_ma_ctenare
id_uzivatel, id_zprava

V poslední tabulce budeš mít tedy 2 cizí klíče (jedná se o vazbu M:N). ID uživatele a ID zprávy. Pokud si uživatel 5 přečte zprávu 18, tak se v této tabulce bude vyskytovat řádek s hodnotami 5 | 18. Když si to nepřečte (resp. nedá nezobrazovat zprávu) tak v této tabulce tento řádek nebude.
tomyc
Profil *
Omlouvám se za opožděnou reakci. Děkuji za obě rady. Jen bych se ještě zeptal, jak co nejefektivněji zpravy pro konkrétního uživatele zobrazit. Jedná se mi o výpis z databáze, nikoliv o začlenění do stránky. Asi je nesmysl procházet pro každý řádek v tabulce zprava celou tabulku zprava_ma_ctenare . Šlo by nějak jednoduše porovnat tabulky zprava_ma_ctenare a zprava se zaměřením na konkrétní ID uživatele a následně vypsat z tabulky zprava pouze zprávy, které nebyly uživatelem přečteny (jejich ID není v tabulce zprava_ma_ctenare pro ID přihlášeného uživatele)? Předem děkuji za radu
juriad
Profil
SELECT * FROM zprava z WHERE z.id NOT IN (SELECT zc.id_zprava FROM zprava_ma_ctenare zc WHERE zc.id_uzivatel = $uzivatel)
$uzivatel je id uživatele, pro kterého chceš získat nezobrazené zprávy
voliteně na samý konec přidej seřazení od nejstarších a omezení počtu.
ORDER BY z.id ASC LIMIT $pocet
tomyc
Profil *
Vypadá to jednoduše, ale dohromady bych to sám asi nedal :-) Děkuji moc.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: