Autor | Zpráva | ||
---|---|---|---|
Jakuje Profil |
#1 · Zasláno: 22. 12. 2007, 18:46:30
Tak zase otravuju ...
Potřeboval bych kontrolovat přečtenost zpráv a podle toho zobrazit první nepřečtenou. Zatím mám v MySQL tabulku se zprávami (id,datum,obsah) a tabulku do které ukládám jaký úživatel si již tuto zprávu přečetl (user_id, mesage_id) Pomocí JOINu se mi to nějak povedlo udělat, ale když jsem přemýšlel že jich bude víc a mám zobrazit PRVNI nepřečtenou, tak už jsem nevěděl. Něco podobnéhu musí mít třeba v phpBB, ale v databázi jsem nenašel žádnou logicky pojmenovanou tabulku. Pomůže někdo? |
||
Taps Profil |
#2 · Zasláno: 22. 12. 2007, 19:09:45
Jakuje
zkus to uděla tak že se uživateli kterému došla zpráva ukáže např. prvních 15 znaků zprávu a pak až zprávu rozklikne tak se uloží aktuální čás do databáze ke zprávě která má např id 2. Snad jsem tě navedl správným směrem |
||
Jakuje Profil |
#3 · Zasláno: 22. 12. 2007, 19:14:10
Nějak jsem to nepochopil kam směřuješ ...
Ještě upřesním probleém: Standartní zprávový systém mám napsaný, ale nyní jsem začal dělat systémové zprávy, které nechodí do složky se zprávami, ale zobrazují se v horní části stránky a uživatel si je může odklepnout, že už ji tam nechce. |
||
djlj Profil |
#4 · Zasláno: 22. 12. 2007, 19:44:04
Ukládej si někam, kteří uživatelé již zprávu viděli, a těm ji už nezobrazuj.
Standartní zprávový systém K čemu vlajky? |
||
Jakuje Profil |
#5 · Zasláno: 22. 12. 2007, 19:48:50
Ukládej si někam, kteří uživatelé již zprávu viděli, a těm ji už nezobrazuj.
To právě dělám. K tomu mám tu druhou tabulku, ale potřebuju vymyslet jak to z ní dostat ven. K čemu vlajky? Vlajkama myslíš zprávy v horní části stránky? Taky se hodí, ať to mají uživatelé na očích |
||
Jakuje Profil |
#6 · Zasláno: 22. 12. 2007, 19:49:12
Ukládej si někam, kteří uživatelé již zprávu viděli, a těm ji už nezobrazuj.
To právě dělám. K tomu mám tu druhou tabulku, ale potřebuju vymyslet jak to z ní dostat ven. K čemu vlajky? Vlajkama myslíš zprávy v horní části stránky? Taky se hodí, ať to mají uživatelé na očích |
||
djlj Profil |
#7 · Zasláno: 22. 12. 2007, 19:51:24
Jakuje
Ne, tím myslím ty standarty, o kterých jsi tu začal nějak nesmyslně psát :). Pravděpodobně máš na mysli slovo standard. potřebuju vymyslet jak to z ní dostat ven SELECT nefunguje? :) |
||
Joker Profil |
#8 · Zasláno: 22. 12. 2007, 19:57:17
Jakuje
phpBB to má myslím udělané jinak, taky jsem to zkoumal. Tuším, že si ukládá do cookie serializované pole vláken do kterých uživatel vlezl a u každého buď čas nebo ID (teď si nevzpomínám) příspěvku, který byl v tu chvíli poslední. Nevím, jestli se to v nějakou chvíli přenáší na server, každopádně ten systém je náchylný na smazání cookies. |
||
Jakuje Profil |
#9 · Zasláno: 22. 12. 2007, 20:10:45
SELECT nefunguje? :)
No funguje, ale jak v tom udělat logiku. Nepovedlo se mi v dotazu udělat aby se to pomocí JOIN spojilo s druhou tabulkou a potom (do dotazu) dát podmínku zda je hodnoto z druhé tabulku NULL Mám tu toto: SELECT * FROM sysmes LEFT JOIN sysmes_read ON sysmes.id = sysmes_read.mid WHERE (sysmes_read.uid is NULL OR sysmes_read.uid = '" . $user['id'] . "') " . $where . " ORDER BY sysmes.date" . $order_by . " LIMIT 1 a dále v PHP mám podmínku na NULL, ale není to ideální, pokdu je jedna přečtená, další se nevytáhne. Zrušit limit by bylo asi neefektivní a v else větvi volat další takovou věc ... no nevím Ne, tím myslím ty standarty, o kterých jsi tu začal nějak nesmyslně psát :). Pravděpodobně máš na mysli slovo standard. ach ten češtin ...:) |
||
Jakuje Profil |
#10 · Zasláno: 22. 12. 2007, 22:32:12
Asi jsem netrefil přesně předmět/nadpis. Nejde přesně o kontrolu přečtenosti, ale spíš o kontrolu zda zobrazovat uživateli danou zprávu (zruší se kliknutím na odkaz, to už mám vyřešené)
|
||
DJ Miky Profil |
#11 · Zasláno: 22. 12. 2007, 22:55:40
K čemu je potřeba druhá tabulka? Nešlo by do první přidat sloupec 'precteno'?
|
||
Jakuje Profil |
#12 · Zasláno: 22. 12. 2007, 23:27:43
Jde o to že tato informace je potřeba pro každého uživatele a ne globálně. Můžu to řešit rozesíláním standardních zpráv, ale já jsem to nechtěl kopírovat pro každého.
|
||
Alphard Profil |
#13 · Zasláno: 22. 12. 2007, 23:28:38
DJ Miky
otázka je, jestli je jedna zpráva pro jednoho nebo více uživatelů Jakuje bylo by vhodné popsat strukturu tabulek a věci, které znáš (id, ...), třeba ti někdo poskládá dotaz, jinak můžeme jenom tipovat řešení a diskutovat s djlj o pravopise (našel si zálibu v opravování chyb) |
||
Jakuje Profil |
#14 · Zasláno: 22. 12. 2007, 23:42:02 · Upravil/a: Jakuje
... a diskutovat s djlj o pravopise (našel si zálibu v opravování chyb)
Když mu nejde nic jiného :D bylo by vhodné popsat strukturu tabulek a věci, které znáš (id, ...), Tabulka sysmes id - int() date - int() content - text // snad nemusím komentovat Tabulka sysmes_read mid - int() - číslo zprávy (sysmes.id) uid - int() - číslo uživatele, dostupné v každém scriptu projektu struktura je jednoduchá, ale problém složitý ... Ještě jednou: Jde mi o to, aby se uživateli s id zobrazila zpráva z tabulky sysmes pokud v tabulce sysmes_read není záznam s id zprávy a id uživatele. Pokud uživatel klikne na odkaz, přidá se do tabulky sysmes_read záznam a dále se zobrazovat nebude, nebo se zobrazí poslední nepřečtená zpráva (ORDER BY date ASC). Pokud někoho napadne nějaký jiný systém než jsem namyslel já, tak také budu rád. Možná ani není možné to naprogramovat tak jak jsem si to namyslel já. |
||
djlj Profil |
#15 · Zasláno: 22. 12. 2007, 23:47:15
Jakuje
... LEFT JOIN sysmes_read ON users.id=sysmes_read.uid ... WHERE sysmes_read.mid IS NULL Když mu nejde nic jiného :D Ono nebylo co psát jiného, když tu nebyla ta struktura… |
||
Jakuje Profil |
#16 · Zasláno: 22. 12. 2007, 23:51:13
... LEFT JOIN sysmes_read ON users.id=sysmes_read.uid ... WHERE sysmes_read.mid IS NULL
Ale já tam potřebuju kotrolovat to ID uživatele. Myslím že databáze to sama nepozná. Toto jsem měl taky, ale prostě to id mi tam chybělo. |
||
djlj Profil |
#17 · Zasláno: 22. 12. 2007, 23:52:25
Ale já tam potřebuju kotrolovat to ID uživatele. Myslím že databáze to sama nepozná.
LEFT JOIN sysmes_read ON users.id=sysmes_read.uid ti nestačí? |
||
Jakuje Profil |
#18 · Zasláno: 22. 12. 2007, 23:55:41
Tak já se blbě zeptám:
user.id je proměnná obashující ID uživatele, kterou tam do toho dotazu vložím? jestli ano, tak to asi bude fachat. Ráno vyzkouším. Díky |
||
djlj Profil |
#19 · Zasláno: 22. 12. 2007, 23:56:22
Jo, je. Připoj si tam někam i tabulku s uživateli, nebo pokud máš id uživatele už v nějaké proměnné, použij ji.
|
||
Jakuje Profil |
#20 · Zasláno: 23. 12. 2007, 00:06:51
OK. Díky. Tak toto mě nějak nedošlo že bych to tak mohl udělat. Přecejenom na vsevjednom jsi asi získal spoustu zkušeností.
Tak jdu spát. Ráno to vyzkouším. |
||
Jakuje Profil |
#21 · Zasláno: 23. 12. 2007, 11:32:43
Tak to mě nenapadlo že se JOINovat pomocí dvou slopců ...
LEFT JOIN sysmes_read ON user.id = sysmes_read.uid AND sysmes.id = sysmes_read.mid Tak moc díky. |
||
Časová prodleva: 16 let
|
0