Autor | Zpráva | ||
---|---|---|---|
Anonymní Profil * |
#1 · Zasláno: 17. 3. 2006, 10:00:04
Dobrý den,
snažím se trošku urychlovat svoje stránky a narazil jsem na (pro mě) neřešitelný problém. Mám 2 tabulky, jedna, kam se zapistují nové příspěvky do diskusního fóra a druhou, kam se zapisují přečtené příspěvky jednotlivých uživatelů. Problém je, že potřebuji vypsat ty záznamy z nových příspěvků, které neobsahuje tabulka přečtených příspěvků. Momentálně to řeším tak, že si vypíšu všechny záznamy z nových příspěvků a postupně je procházím a dotazuji se do přečtených příspěvků a pokud záznam nenajdu, tak vím, že tento příspěvek nebyl doposud daným uživatelem přečten. Bohužel tento zůsob je dosti pomalý a věřím, že to lze udělat i lépe a radostněji. Bohužel zatím jsem nepřišel jak. Zatím se mi povedlo vypsat jednoduše pouze záznamy, kdy je uživatel zapsaný v přečtených příspěvcích a akorát nesouhlasí prispevek_id v nových a přečtených příspěvcích (nove_prispevky.prispevek_id>prectene_prispevky.prispevek_id). Ale pokud vůbec neexistuje záznam v přečtených příspěvcích, tak to nefunguje. Pro přehlednost kus kódu, pomocí kterého to nyní zjišťuji : $identifikace - jednoznačné číslo, identifikující jednotlivé témata $prispevek_id - číslo posledního čteného příspěvku $uzivatel_id - identifikace uživatele $dotaz="select * from nove_prispevky order by cas desc"; $sql=mysql_query($dotaz); if(!$sql) echo "Chyba ve výpisu nových příspěvků !"; while($zaznam = MySQL_Fetch_Object($sql)) { $dotaz1="select * from prectene_prispevky where identifikace=$zaznam->identifikace and prispevek_id>=$zaznam->prispevek_id and uzivatel_id=$uzivatel_id"; $sql1=mysql_query($dotaz1); if(!$sql1) echo "Chyba ve výpisu prectenych příspěvků !($dotaz1)"; $pocet_zaznamu1=mysql_num_rows($sql1); if ($pocet_zaznamu1==0) { // zaznamenání nečteného příspěvku ze $zaznam } } |
||
michaelkiller Profil |
#2 · Zasláno: 17. 3. 2006, 12:07:39
A nieco ako..
SELECT * from nove_prispevky WHERE nove_prispevky.id NOT IN (SELECT * from nove_prispevky a, prectene_prispevky b WHERE a.id=b.id) by nemohlo fungovat? |
||
Leo Profil |
#3 · Zasláno: 17. 3. 2006, 12:23:25
A struktura (sloupce) tech dvou tabulek by nebyly? Resi se to JOINEM (LEFT nebo RIGHT) a testujete NULL, Leo
|
||
Kajman_ Profil * |
#4 · Zasláno: 17. 3. 2006, 14:54:40
select n.*, p.identifikace as identifikace2 from nove_prispevky n left join prectene_prispevky p on (n.identifikace=p.identifikace and n.prispevek=p.prispevek and p.uzivatel_id=$uzivatel_id) where p.identifikace is null order by cas desc
|
||
Časová prodleva: 3 dny
|
|||
Anonymní Profil * |
#5 · Zasláno: 20. 3. 2006, 09:57:51
Děkuji všem za rady, speciální dík patří Kajman_ovi !
Dotaz nakonec správně funguje takto : select n.id, n.cas, n.identifikace from nove_prispevky n left join prectene_prispevky p on (n.identifikace=p.identifikace and n.prispevek_id=p.prispevek_id and p.uzivatel_id=1) where p.identifikace is null order by cas desc Vidím, že se mám ještě hodně co učit, ale tohle mě moc potěšilo ! |
||
Časová prodleva: 19 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0