Autor Zpráva
Anonymní
Profil *
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
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
A struktura (sloupce) tech dvou tabulek by nebyly? Resi se to JOINEM (LEFT nebo RIGHT) a testujete NULL, Leo
Kajman_
Profil *
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
Anonymní
Profil *
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 !
Toto téma je uzamčeno. Odpověď nelze zaslat.

0