YourWBB


yourWBB » yourWBB Misc * » Das Proggen » MySQL und PHP » Änderung in Suchanfrage » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag 3.072 Views | | Thema zu Favoriten hinzufügen

Neues Thema erstellen Antwort erstellen

Zum Ende der Seite springen Änderung in Suchanfrage
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
vision
Mitglied


Dabei seit: 26.07.05
Beiträge: 15

 Änderung in Suchanfrage Antworten Zitieren Editieren Melden       UP

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 (!$boardidsredirect($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 (!$savepostidsredirect($lang->get("LANG_GLOBAL_ERROR_SEARCHNORESULT"), "search.php" $SID_ARG_1ST);
    $result $db->query_first("SELECT searchid FROM bb".$n."_searchs WHERE searchhash = '".getQueryHash($savepostids1'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($savepostids1'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 vision ist offline E-Mail Finden Als Freund hinzufügen
[kamui]
~


images/avatars/avatar-4963.gif

Dabei seit: 27.04.05
Beiträge: 2.992

Antworten Zitieren Editieren Melden       UP

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 [kamui] ist offline Finden Als Freund hinzufügen
vision
Mitglied


Dabei seit: 26.07.05
Beiträge: 15

Themenstarter Thema begonnen von vision
Antworten Zitieren Editieren Melden       UP

Das hatte ich schon versucht.

Aber
php:
1:
2:
3:
4:
5:
6:
7:
$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"
        . (($postids) ? (" AND p.postid IN (".$postids.")") : (""))
        . (($userids) ? (" AND ".((isset($_POST['onlystarter']) && $_POST['onlystarter'] == 1) ? ("t.starterid") : ("p.userid"))." IN ($userids)") : (""))
        . (($boardids) ? (" AND t.boardid IN (".$boardids.")") : (""))
        . (($searchprefix) ? (" AND t.prefix = '".addslashes($searchprefix)."'") : (""))
        . (($searchdate) ? (" AND $searchdate") : ("")));
        while ($row $db->fetch_array($result)) $savepostids .= ','.$row['postid'];

übersteigt leider deffinitiv meinen programmiertechnischen Horizont.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von vision: 07.08.06 06:37.

07.08.06 06:36 vision ist offline E-Mail Finden Als Freund hinzufügen
[kamui]
~


images/avatars/avatar-4963.gif

Dabei seit: 27.04.05
Beiträge: 2.992

Antworten Zitieren Editieren Melden       UP

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 [kamui] ist offline Finden Als Freund hinzufügen
vision
Mitglied


Dabei seit: 26.07.05
Beiträge: 15

Themenstarter Thema begonnen von vision
Antworten Zitieren Editieren Melden       UP

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 (!$boardidsredirect($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 (!$savepostidsredirect($lang->get("LANG_GLOBAL_ERROR_SEARCHNORESULT"), "search.php" $SID_ARG_1ST);
    $result $db->query_first("SELECT searchid FROM bb".$n."_searchs WHERE searchhash = '".getQueryHash($savepostids1'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($savepostids1'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 vision ist offline E-Mail Finden Als Freund hinzufügen
Baumstruktur | Brettstruktur
Gehe zu:

Neues Thema erstellen Antwort erstellen

yourWBB » yourWBB Misc * » Das Proggen » MySQL und PHP » Änderung in Suchanfrage