"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

prob mit mysqlabfrage

Martin 20.04.2003 - 14:15 580 6
Posts

Martin

Big d00d
Registered: Jun 2000
Location: Stuttgart
Posts: 261
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

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
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
Registered: Jun 2000
Location: Stuttgart
Posts: 261
mh...
öhm
versteh ich nich ganz ^^
kannst du das vll so schreiben, dass ichs in den code einbinden kann? :)
wenns keine umstände macht :D

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Code: PHP
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... :rolleyes:

Martin

Big d00d
Registered: Jun 2000
Location: Stuttgart
Posts: 261
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

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Zitat von Martin
also ich hab deins mal ausprobiert. es liefert nich das gewünschte ergebnis :)
war klar
Zitat von Martin
(wenns eine row nicht gibt, dann wird doch daraus NULL gemacht oda? :) )
nicht unbedingt, kommt auf das feld an
Zitat von Martin
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
Registered: Jun 2000
Location: Stuttgart
Posts: 261
mh grml
ok dann nicht.
mh so.... habs jetzt doch selbst hinbekommen, falls es dich interessiert. aber halt umständlich³ wie ich find.

Code: PHP
$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
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz