Änderung in Suchanfrage |
vision
Mitglied
Dabei seit: 26.07.05
Beiträge: 15
|
|
Hallo. Ich versuche in mein Board eine Funktion einzubauen, die wenn man im Profil eines Users auf "Suchen" geht nichtmehr alle Beiträge sondern nurnoch die gestarteten Themen anzeigt.
Was ich in der search.php ändern muß habe ich schon gefunden die Frage ist nur wie.
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
|
if ($_GET['action'] == 'user') {
if (!isset($_GET['userid'])) error($lang->get("LANG_GLOBAL_ERROR_FALSELINK", array('$adminmail' => $adminmail)));
$boardids = '';
list($boardcount) = $db->query_first("SELECT COUNT(*) FROM bb".$n."_boards");
$result = $db->query("SELECT boardid FROM bb".$n."_boards WHERE password='' AND boardid IN (0".getSearchableBoards().")");
if ($db->num_rows($result) < $boardcount) {
while ($row = $db->fetch_array($result)) {
if ($boardids != '') $boardids .= ','.$row['boardid'];
else $boardids = $row['boardid'];
}
if (!$boardids) redirect($lang->get("LANG_GLOBAL_ERROR_SEARCHNORESULT"), "search.php" . $SID_ARG_1ST);
}
$savepostids = '';
$userid = intval($_GET['userid']);
$result = $db->unbuffered_query("SELECT p.postid FROM bb".$n."_posts p, bb".$n."_threads t WHERE p.threadid=t.threadid AND p.visible=1 AND p.userid='$userid'
".(($boardids) ? ("AND t.boardid IN ($boardids)") : ("")));
while ($row = $db->fetch_array($result)) $savepostids .= ','.$row['postid'];
if (!$savepostids) redirect($lang->get("LANG_GLOBAL_ERROR_SEARCHNORESULT"), "search.php" . $SID_ARG_1ST);
$result = $db->query_first("SELECT searchid FROM bb".$n."_searchs WHERE searchhash = '".getQueryHash($savepostids, 1, 'lastpost', 'desc', $wbbuserdata['userid'], $REMOTE_ADDR)."'");
if ($result['searchid']) {
header("Location: search.php?searchid=".$result['searchid'].$SID_ARG_2ND_UN);
exit();
}
$db->query("INSERT INTO bb".$n."_searchs (searchhash,postids,showposts,sortby,sortorder,searchtime,userid,ipaddress)
VALUES ('".getQueryHash($savepostids, 1, 'lastpost', 'desc', $wbbuserdata['userid'], $REMOTE_ADDR)."','$savepostids','1','lastpost','desc','".time()."','$wbbuserdata[userid]','$REMOTE_ADDR')");
$searchid = $db->insert_id();
header("Location: search.php?searchid=$searchid".$SID_ARG_2ND_UN);
exit();
} |
|
Kann mir jemand sagen, wie ich die Abfrage dementsprechend anpassen kann?
Ich habe es jetzt so versucht
php: |
1:
2:
3:
4:
5:
|
$savepostids = '';
$userid = intval($_GET['userid']);
$result = $db->unbuffered_query("SELECT t.threadid FROM bb".$n."_threads t INNER JOIN bb".$n."_posts p on t.threadid = p.threadid WHERE p.visible=1 AND p.userid='$userid'
".(($boardids) ? ("AND t.boardid IN ($boardids)") : ("")));
while ($row = $db->fetch_array($result)) $savepostids .= ','.$row['threadid']; |
|
Aber aus irgendeinem Grund den ich nicht nachvollziehen kann wird immer nur ein Thread angezeigt.
Danke schonmal im Vorraus.
|
|
06.08.06 22:13 |
E-Mail
Finden
Als Freund hinzufügen
|
|
[kamui]
~
Dabei seit: 27.04.05
Beiträge: 2.992
|
|
Bei der Standart-Suchfunktion gibt es doch auch die Möglichkeit, nur gestartete Themen zu finden. Orientiere dich doch einfach an diesem ?!
|
|
06.08.06 22:19 |
Finden
Als Freund hinzufügen
|
|
[kamui]
~
Dabei seit: 27.04.05
Beiträge: 2.992
|
|
php: |
1:
|
. (($userids) ? (" AND ".((isset($_POST['onlystarter']) && $_POST['onlystarter'] == 1) ? ("t.starterid") : ("p.userid"))." IN ($userids)") : ("")) |
|
Auf diese zeile kommt es an, und das mit den Klammern ist ein einfacher if()-Befehl, ohne if() würde das ganze dann so aussehen:
php: |
1:
2:
|
$result = $db->unbuffered_query("SELECT p.postid FROM bb".$n."_posts p, bb".$n."_threads t WHERE p.threadid=t.threadid AND p.visible=1 AND t.starterid IN ($userids)"
while ($row = $db->fetch_array($result)) $savepostids .= ','.$row['postid']; |
|
Ich weiß nicht genau, ob es so funktioniert, da ich dieses IN nicht kenne, sollte aber.
|
|
07.08.06 09:59 |
Finden
Als Freund hinzufügen
|
|
vision
Mitglied
Dabei seit: 26.07.05
Beiträge: 15
Themenstarter
|
|
Klappt leider nicht. Oder ich hab da jetzt was falsch verstanden.
Bei mir siehts jetzt so aus:
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
|
/* userthreads */
if ($_GET['action'] == 'starter') {
if (!isset($_GET['userid'])) error($lang->get("LANG_GLOBAL_ERROR_FALSELINK", array('$adminmail' => $adminmail)));
$boardids = '';
list($boardcount) = $db->query_first("SELECT COUNT(*) FROM bb".$n."_boards");
$result = $db->query("SELECT boardid FROM bb".$n."_boards WHERE password='' AND boardid IN (0".getSearchableBoards().")");
if ($db->num_rows($result) < $boardcount) {
while ($row = $db->fetch_array($result)) {
if ($boardids != '') $boardids .= ','.$row['boardid'];
else $boardids = $row['boardid'];
}
if (!$boardids) redirect($lang->get("LANG_GLOBAL_ERROR_SEARCHNORESULT"), "search.php" . $SID_ARG_1ST);
}
$savepostids = '';
$userid = intval($_GET['userid']);
$result = $db->unbuffered_query("SELECT p.postid FROM bb".$n."_posts p, bb".$n."_threads t WHERE p.threadid=t.threadid AND p.visible=1 AND t.starterid IN ($userids)");
while ($row = $db->fetch_array($result)) $savepostids .= ','.$row['postid'];
if (!$savepostids) redirect($lang->get("LANG_GLOBAL_ERROR_SEARCHNORESULT"), "search.php" . $SID_ARG_1ST);
$result = $db->query_first("SELECT searchid FROM bb".$n."_searchs WHERE searchhash = '".getQueryHash($savepostids, 1, 'lastpost', 'desc', $wbbuserdata['userid'], $REMOTE_ADDR)."'");
if ($result['searchid']) {
header("Location: search.php?searchid=".$result['searchid'].$SID_ARG_2ND_UN);
exit();
}
$db->query("INSERT INTO bb".$n."_searchs (searchhash,postids,showposts,sortby,sortorder,searchtime,userid,ipaddress)
VALUES ('".getQueryHash($savepostids, 1, 'lastpost', 'desc', $wbbuserdata['userid'], $REMOTE_ADDR)."','$savepostids','1','lastpost','desc','".time()."','$wbbuserdata[userid]','$REMOTE_ADDR')");
$searchid = $db->insert_id();
header("Location: search.php?searchid=$searchid".$SID_ARG_2ND_UN);
exit();
} |
|
Und das ist die Fehlermeldung:
Zitat: |
SQL-DATABASE ERROR
Database error in WoltLab Burning Board (2.3.5): Invalid SQL: SELECT p.postid FROM bb1_posts p, bb1_threads t WHERE p.threadid=t.threadid AND p.visible=1 AND t.starterid IN ()
mysql error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1
mysql error number: 1064
mysql version: 4.1.13
php version: 4.4.0
Date: 07.08.2006 @ 17:27
Script: /wbb2/search.php?action=starter&userid=26811
Referer: |
|
|
07.08.06 17:30 |
E-Mail
Finden
Als Freund hinzufügen
|
|
|