prob mit mysqlabfrage
Martin 20.04.2003 - 14:15 580 6
Martin
Big d00d
|
tach :>
also es geht um ein forum. ich würde gerne die neuen threads, die seit dem letzten besuch im forum neu sind, zählen.
ich hab eine tabelle thread_visits.
---------------------------------------- | thread_id | user_id | threadvisit | ----------------------------------------
und eine tabelle forum_threads (vereinfacht)
---------------------------- | id | time | posted_by | ----------------------------
die userid ist $u_id
jetzt würde ich gern mit mysql_num_rows die threads zählen, in denen die time > threadvisit ist. und wenns keinen eintrag in thread_visits für den thread gibt (also wenn der thread neu ist) muss halt auch irgendwie +1 gezählt werden ^^
ich würde das, wenn möglich, gern in einer abfrage machen.
Bearbeitet von Martin am 20.04.2003, 14:51
|
watchout
Legendundead
|
sollte mit reinem sql leichter zu lösen sein
select count(id) from thread_visits, forum_threads where thread_visits.user_id=$u_id and thread_visits.threadvisit<forum_threads.time
|
Martin
Big d00d
|
mh... öhm versteh ich nich ganz ^^ kannst du das vll so schreiben, dass ichs in den code einbinden kann? wenns keine umstände macht
|
watchout
Legendundead
|
mysql_query("
SELECT count(thread_visits.thread_id)
FROM thread_visits, forum_threads
WHERE
thread_visits.user_id=$u_id AND
thread_visits.thread_id=forum_threads.id AND
thread_visits.threadvisit<forum_threads.time");
aber ich sag dir, dass das mit 90% wahrscheinlichkeit nicht das is was du brauchst, weil deine problemstellung in sich nicht schlüssig ist... wie wärs wenn du dir mal sql und php reinziehst bevor du solche adaptionen durchführst? wieauchimmer... die obige abfrage sollte die anzahl der threads augeben, die von einem gegebenen user ($u_id) besucht wurden warum die time grösser als visit sein muss, musst du dich selber fragen, hört sich für mich unlogisch an, aber viel info hab ich ja auch wieder mal nicht. ps: hatte was vergessen...
|
Martin
Big d00d
|
mhh... ok das mit threadvisit < time is echt unlogisch ^^ also ich hab deins mal ausprobiert. es liefert nich das gewünschte ergebnis also ich denk mir das so. irgendwie muss ich die 2 tabellen zusammenfügen, also per left join. und dann müssen die reihen gezählt werden, in denen der threadvisit NULL ist, also es in der tabelle thread_visits keinen eintrag für den thread gibt, weil der user diesen thread noch nicht gelesen hat. also so : (wenns eine row nicht gibt, dann wird doch daraus NULL gemacht oda? ) -------------------------------------------------------------------- | id | time | posted_by | thread_id | user_id | threadvisit | ------------------------------------------------------------------- | 1 | 1111 | 2 | NULL | NULL | NULL | ------------------------------------------------------------------- also so ähnlich ich hoff das man das jetzt besser versteht.
|
watchout
Legendundead
|
also ich hab deins mal ausprobiert. es liefert nich das gewünschte ergebnis war klar (wenns eine row nicht gibt, dann wird doch daraus NULL gemacht oda? ) nicht unbedingt, kommt auf das feld an ich hoff das man das jetzt besser versteht. ich zumindest nicht edit: versuch bitte sinnvolle aussagen zu machen: es gibt felder und datensätze bzw. spalten (column) und zeilen (row) wenns eine ZEILE nicht gibt, dann is sie nicht da - punkt was du gemeint hast is, wenn ein FELD von einem DATENSATZ leer is, bzw. ausgelassen wird, ob dann NULL drinnen steht (vermut' ich mal) ob jetzt NULL drinnensteht, kommt darauf an, ob das feld NOT NULL is oder eben nicht, wenn es NOT NULL is, dan muss ein standardwert gegeben sein.
Bearbeitet von watchout am 20.04.2003, 17:54
|
Martin
Big d00d
|
mh grml ok dann nicht. mh so.... habs jetzt doch selbst hinbekommen, falls es dich interessiert. aber halt umständlich³ wie ich find. $select_threads = mysql_query("SELECT * FROM forum_threads WHERE board_id = '$dat[id]'");
$threads = mysql_num_rows($select_threads);
if($threads > 0)
{
$tv_num = 0;
while($d = mysql_fetch_array($select_threads))
{
if(mysql_num_rows(mysql_query("SELECT * FROM thread_visits WHERE thread_id = '$d[id]' AND sltable = '$mytable' AND user_id = '$u_id'")) > 0)
{
$tv_num++;
}
}
$red_threads = $threads-$tv_num;
if($red_threads != 0)
{
echo " <font color=\"#ff0000\">(" . $red_threads . ")</font>";
}
}
Bearbeitet von Martin am 20.04.2003, 18:26
|