php search script

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • php search script

    Hallo,

    ich suche ein script, das meine page durchsucht, also der User soll Begriff eingeben und dann sollen drunter die Ergebnisse kommen mit link dazu.

    Die Page ist zu 95% inhaltlich in einer mysql datenbank.
    kann mir da jemand helfen ?

    Für die News hab ich selbst schon was gemacht, aber das funkt nich so wie ich es will, ich kann lediglich mit nur 1nem wort suchen damit ergnisse erzielt werden sobald es dann 2 oder 3 oder 4 worte sind kommt entweder nichts oder man hat zufall das diese 2 worte neben einander stehen

    also benötige ich 2 dinge:

    1) ein scirpt das einfach die ganze datenbank durchsucht und mir ergebnisse mit den dazugehörigen links auspuckt

    2) hilfe bei meinem suchscript für die news das nur in den news sucht

    PHP-Code:
    <form method="post" <?php echo "action=site.php?page=53&d=$d&lan=$lan"?>
    <?php echo "$text203"?>: <input type='text' name='suche'> 
    <input type='submit' value='Suchen!'> 
    </form> 

    $sql = "SELECT * FROM ".$dblan."_news WHERE eintrag LIKE '%$suche%' 
    OR titel LIKE '%$suche%' OR kategorie LIKE 
    '%$suche%' ORDER BY id DESC";

    und dann lese ich einfach die dazugehörigen news tabellen aus
    Zuletzt geändert von wahsaga; 12.12.2006, 22:06.

  • #2
    Nimm doch einfach den eingegebenen String mit expode auseinander uns suche dann nach den einzelnen Teilen

    Beispiel:

    PHP-Code:
    <?php
        $suchstring 
    "Wort1, Wort2, Wort3 + Wort4"//Eingegebener String
        
        //Dann solltest du noch Kommas, Pluszeichen etc., die der  
        //Benutzer evtl. für die Aufzählung eingegeben hat entfernen:
          
    $suchstring str_replace (","" "$suchstring); //Ersetzt alle Kommas durch Leerzeichen
        
    $suchstring str_replace ("+"" "$suchstring); //Ersetzt alle + durch Leerzeichen
        
        //Dann teilst du den String anhand der Leerzeichen auf und
        //bekommst ein Array mit den Teilen zurück
        
    $suchstring explode (" "$suchstring);
        
        
    //Zähle die Werte des Arrays:
        
    $anz count ($suchstring);
        
        
    //Sende die einzelnen Anfragen an die DB
        
    for ($i=0$i<$anz; ++$i) {
            
    $suche $suchstring[$i];        
            
    //Dieses Suchwort kannst du jetzt an die DB senden
            
    $sql "SELECT * FROM ".$dblan."_news WHERE eintrag LIKE '%$suche%' 
    OR titel LIKE '%
    $suche%' OR kategorie LIKE 
    '%
    $suche%' ORDER BY id DESC";
            
    //...
        
    }
    ?>
    Habs jetzt nicht ausprobiert, aber vom Prinzip her sollte es funktionieren!
    Zuletzt geändert von wahsaga; 12.12.2006, 22:06.

    Kommentar


    • #3
      Macht da mal irgendwie was gegen die Überbreite, ist ja furchtbar sowas!

      Also ich hatte damals ein Script entworfen, wo man News eintragen konnte. Dann wurde jedes Wort innerhalb dieses Newseintrages in eine separate Datenbank gepackt. (Erst wird der String in Arrays gepackt und ,.- & Konsorten rausgenommen...) Jedes Wort bekommt eine eigene ID (Haupt-ID) und eine Newseintrags-ID (Neben-ID).
      Beispiel: Würde der Newseintrag "Ich lebe noch immer bei Mutti." heißen, würden die Datenbankeinträge so aussehen:

      PHP-Code:
      -------------------------------
      ID |     News_ID    Wort  |
      -------------------------------
      |  
      |       1        Ich   |
      |  
      |       1        lebe  |
      |  
      |       1        noch  |
      |  
      |       1        immer |
      |  
      |       1        bei   |
      |  
      |       1        Mutti |
      ------------------------------- 
      Und dann brauchst du nur diese "Neben-Tabelle" Abfragen. Da wo dann die meisten Übereinstimmungen gefunden werden, sollte dir natürlich ausgegeben werden... Klappt auf jeden Fall

      mfg nOe

      PS: Und für die "Schlaumeier" unter euch: Ja, die Neben-Tabelle wird ziemlich schnell ziemlich sehr viel groß. Aber selbst bei einer Million-IDs bekommt der User nicht wirklich viel von der Wartezeit mit. Es sei denn, ihr habt noch einen 486er mit 100MHz und ein 28,8k Modem
      Zuletzt geändert von nOe; 12.12.2006, 21:56.
      "I am what I am and I do what I can..."
      Meine HP -- Mein GPG-Key
      Meine Projekte: WebStorage 2.0 -- easyAJAX-Chat 2.2.0 (beta)

      Kommentar


      • #4
        @Mathis sry das ich mich jetzt erst melde hab es nun ausprobiert, zur hälfte läuft es, jedoch gibts ein etwas großes problem

        wenn ich zb nun:

        Games Serie mache, werden 5 einträge angezeigt was ok ist. wenn ich aber

        Games + Serie oder Games, Serie mache, so werden dann wieder alle angezeigt und nicht diese 5 sondern einfach alles

        und mein eintragszähler der nach einträgen blättern sollte zeigt immer das falsche ergebnis an immer die einträge vom ersten such wort, also wie beim ersten sind es Games 4 und serie 1 somit werden dann 4 einträge angezeigt obwohl 5 sichtbar sind wenn ich serie games mache wird 1 angezeigt statt 5

        woran liegt das ?

        hier der test

        http://www.pj-firepower.com/site.php?page=53&d=&lan=1

        und hier mein code

        PHP-Code:
        <form method="post" <?php echo "action=site.php?page=53&d=$d&lan=$lan"?>>
        <?php echo "$text203"?>: <input type='text' name='suchen'>
        <input type='submit' value='Suchen!'>
        </form>


        <?
            require_once("include/queryList.php");

        $suchstring = "$suchen";

        $suchstring = str_replace (",", " ", $suchstring);
        $suchstring = str_replace ("+", " ", $suchstring);

        $suchstring = explode (" ", $suchstring);

        $anzz = count ($suchstring);

        for ( $i=0; $i<$anzz; ++$i) {
             $suche = $suchstring[$i];

        $sql = "SELECT * FROM ".$dblan."_news WHERE eintrag LIKE '%$suche%' OR titel LIKE '%$suche%' OR kategorie LIKE '%$suche%' ORDER BY id DESC";

        # syntax: queryList( $sql, $link, $page, [$rowsPerPage [, $pageLimit ]])
            $queryList = new queryList( $sql, "site.php?page=53&d=$d&lan=".$lan."&", $pa );
            $result = mysql_query ($queryList->sql);
        ?>
        <?

            if(mysql_num_rows($result))
        {
        while($row=mysql_fetch_array($result))
        {
        $id = $row['id'];

        $new_query = "SELECT * FROM ".$dblan."_knews WHERE id='$id'";

        $res = mysql_query($new_query);

        $anzahl = mysql_num_rows($res);
        {
        $id = $row['id'];

        echo "<table border='0' width='500' class='ntable'>
        <tr hight=1 class='ntr'><td width='500' class='newstitle'><b>"; echo "$row[kategorie]"; echo "&nbsp;:&nbsp;"; echo "$row[titel]"; echo "</b></td></tr>
        <tr class='nntr'><td width='500' class='ntd'>$text204: <a href='mailto:".$row[email]."'>".$row[name]."</a></td></tr>
        <tr class='nntr'><td width='500' class='ntd'>".$row[datum]."</td></tr>
        <tr class='nntr'><td width='500' class='ntd'>";
        eval("?>".nl2br($row['eintrag']));

        echo "</td></tr>
        <tr class='nntr'><td width='500' class='ntd'><p align='right'><a href='";
        echo "site.php?page=52&lan=$lan&id=$id&d=$d'>$text205 $anzahl";
        echo "</a></p></td></tr></table><br>";
        }
        }
        }
        }
        ?>
        <?
            if($queryList->total >= 1) { echo "<br>Displaying records <font color=red>$queryList->start</font> - 
            <font color=red>$queryList->stop</font> of <font color=red>$queryList->total</font>."; }
            if($queryList->pas > 1) { echo "<br>Pages ( $queryList->pas ) : $queryList->result "; }
        ?>

        und @nOe deines würde in kürzerster zeit enorm viel datenbank speicher fressen wenn ich da dann richtig los lege wenn es läuft und ich dann pro tag 2-3 news online stell brauch ich ja bald ne eigene db nur für die news lol aber danke dir trozdem

        Kommentar


        • #5
          Die nativen Volltext-Suchmöglichkeiten von mySQL sind bekannt? Die decken eine Menge ab, auch und vor Allem die Suche nach mehreren Schlüsselwörtern, Wildcards und Gewichtung.

          Kommentar


          • #6
            naja mein englisch ist nicht wirklich so besonders
            könntest mir jemand das an hand meines scriptes erklären ?

            Kommentar


            • #7
              http://www.schefter.net/deutsch/tech...textsuche.html

              Kommentar


              • #8
                ah ok danke sehr.


                wenn ich das richtig verstehe brauch ich

                PHP-Code:

                $suchstring 
                str_replace (","" "$suchstring);
                $suchstring str_replace ("+"" "$suchstring); 
                den teil nicht mehr


                und mache statt
                PHP-Code:
                $sql "SELECT * FROM ".$dblan."_news WHERE eintrag LIKE '%$suche%' OR titel LIKE '%$suche%' OR kategorie LIKE '%$suche%' ORDER BY id DESC"
                das
                PHP-Code:
                SELECT FROM autoren WHERE MATCH (nameAGAINST ('$suche' IN BOOLEAN MODE); 
                und lass den wörtern das + und - ist das richtig ???

                und wie mache ich das mit den "ganzer text" ?

                Kommentar

                Lädt...
                X