Pagina 1 din 2 12 UltimulUltimul
Rezultate 1 la 10 din 13

Subiect: Taguri: nu gaseste rezutate in baza de date dupa 2 cuvinte

  1. #1
    Avatarul lui evolution
    evolution este deconectat Membru SeoPedia
    Reputatie:
    38
    Data înscrierii
    29th October 2006
    Locaţie
    Bucuresti
    Posturi
    997
    Putere Rep
    38


    Implicit Taguri: nu gaseste rezutate in baza de date dupa 2 cuvinte

    Am mai multe produse care au descrieri. Introduc intr-o tabela cuvinte sau combinatii de cuvinte ,numite si taguri, iar scriptul cauta in descrieri dupa acele cuvinte si afiseaza pagina tagului.
    .
    ex descriere: Ana are mere verzi si Ion are pere galbene.

    taguri: mere , pere , verzi (functioneaza)
    taguri: mere verzi , pere galbene (functioneaza)
    taguri: mere galbene , Ana Ion (nu afiseaza nimic)

    Cand am o combinatie de cuvinte a caror ordine este exact ca in descriere, afiseaza rezultate , dar daca ordinea este amestecata nu imi afiseaza nimic .
    Eu am nevoie sa afiiseze chiar daca nu e aceeasi ordine sau daca macar unul din combinatia de vuvinte se regaseste in descriere .Ma puteti ajuta ?Codul pe care il folosesc este mai jos, cred ca problema este la linia rosie .

    Cod:
    <?php include ("db.php");?>
    <HTML>
     <HEAD>
      <TITLE> </TITLE>
      <META NAME="Keywords" CONTENT="">
      <META NAME="Description" CONTENT="">
     </HEAD>
    
     <BODY>
    
    <? 
    $sql = "select * from produs WHERE description LIKE '%$nume_tag%' ORDER BY id_unic DESC LIMIT 20";
    
    $result = mysql_query ($sql);
    while($row = mysql_fetch_array($result)){ 
    			$id_unic=$row["id_unic"];
    			$titlu = $row["titlu"];
    			$description = $row["description"];			
    
    echo"
    
    $titlu : $description
    
    
    	";}?>
    
     </BODY>
    </HTML>
    multumesc

  2. #2
    Avatarul lui Dever
    Dever este deconectat Ambasador
    Reputatie:
    35
    Data înscrierii
    28th July 2006
    Locaţie
    UK
    Vârstă
    43
    Posturi
    378
    Putere Rep
    35


    Implicit

    LIKE nu e bun, trebuie sa folosesti MATCH() AGAINST()
    Dever's Blog - Atentie! dau cu parerea.

  3. #3
    Avatarul lui evolution
    evolution este deconectat Membru SeoPedia
    Reputatie:
    38
    Data înscrierii
    29th October 2006
    Locaţie
    Bucuresti
    Posturi
    997
    Putere Rep
    38


    Implicit

    Daca am inteles bine ,am pus asa , dar imi da eroarea "supplied argument is not a valid MySQL result resource" facand referire la linia albastra .
    Am pus sa caute doar in descriere(fara titlu) si tot eroarea aceasta e .

    Cod:
    <?php include ("db.php");?>
    <HTML>
     <HEAD>
      <TITLE> </TITLE>
      <META NAME="Keywords" CONTENT="">
      <META NAME="Description" CONTENT="">
     </HEAD>
    
     <BODY>
    
    <? 
    $sql = "select * from produs WHERE MATCH (titlu,description) AGAINST ('nume_tag') ORDER BY id_unic DESC LIMIT 20";
    
    $result = mysql_query ($sql);
    while($row = mysql_fetch_array($result)){ 
    			$id_unic=$row["id_unic"];
    			$titlu = $row["titlu"];
    			$description = $row["description"];			
    
    echo"
    
    $titlu : $description
    
    
    	";}?>
    
     </BODY>
    </HTML>

  4. #4
    Avatarul lui Dever
    Dever este deconectat Ambasador
    Reputatie:
    35
    Data înscrierii
    28th July 2006
    Locaţie
    UK
    Vârstă
    43
    Posturi
    378
    Putere Rep
    35


    Implicit

    Nu cred ca are rost sa folosesti ORDER pt ca "default" MATCH iti intoarce rezultatele ordonate in functie de relevanta.
    Incearca SQL-ul si intr-un phpmyadmin daca ai disponibil ... nu imi dau seama daca este ceva gresit
    Dever's Blog - Atentie! dau cu parerea.

  5. #5
    Avatarul lui c_n_m
    c_n_m este deconectat Ambasador
    Reputatie:
    39
    Data înscrierii
    25th February 2006
    Locaţie
    București / Ilfov
    Vârstă
    52
    Posturi
    622
    Putere Rep
    39


    Implicit

    Utilizarea LIKE '%expresia_cautata%' intoarce doar inregistrarile care contin exact expresia cautata. Aceasta cautare cam omoara serverul in cazul unor tabele cu multe inregistrari, pentru ca nu ai cum sa definesti un index in acest caz.

    Cu a zis si Dever, se recomanda utilizarea MATCH() AGAINST(). Nu uita sa-ti setezi in acest caz un index FULLTEXT pe campurile pe care vei face cautarea:

    ALTER TABLE `nume_tabela` ADD FULLTEXT `nume_index` (
    `nume_camp_1` ,
    `nume_camp_2`
    )
    Iata si un exemplu de query SQL, care ordoneaza rezultatele descrescator dupa relevanta:

    SELECT *, MATCH (nume_camp_1, nume_camp_2) AGAINST ('expresia_cautata') AS relevanta
    FROM nume_tabela WHERE MATCH (nume_camp_1, nume_camp_2) AGAINST ('expresia_cautata')
    ORDER BY relevanta DESC LIMIT nr_maxim_rezultate
    Probabil ca query-ul de mai sus mai poate fi optimizat, trebuie considerat doar un punct de pornire. Succes!
    Ultima modificare făcută de c_n_m; 24th November 2008 la 01:01.

  6. #6
    Avatarul lui evolution
    evolution este deconectat Membru SeoPedia
    Reputatie:
    38
    Data înscrierii
    29th October 2006
    Locaţie
    Bucuresti
    Posturi
    997
    Putere Rep
    38


    Implicit

    Inca nu am reusit sa rezolv. Am citit ca si similar text ar merge.Poate returna rezultatele sau arata doar procentul ?

  7. #7
    Avatarul lui forapathy
    forapathy este deconectat Membru SeoPedia
    Reputatie:
    33
    Data înscrierii
    7th May 2007
    Locaţie
    Iasi
    Vârstă
    39
    Posturi
    212
    Putere Rep
    33


    Implicit

    chiar testam zilele astea variante de search prin db si chestia cu MATCH pare cea mai rapida..

    varianta lui @c_n_m merge foarte bine..(desi la select cred ca mai bine lasi doar campurile care vrei sa le returneze ca inca un match acolo inseamna ceva procesare in plus.. cred )

    cred ca nu iti merge ca nu ai setat index de full text cum a zis c_n_m.
    in rest chiar nu vad de ce nu ar merge..
    mai da un paste la ce query ai acum dupa modificare.
    Scriu, rar, pe point47 diverse tips&tricks in web-dev.

  8. #8
    Avatarul lui c_n_m
    c_n_m este deconectat Ambasador
    Reputatie:
    39
    Data înscrierii
    25th February 2006
    Locaţie
    București / Ilfov
    Vârstă
    52
    Posturi
    622
    Putere Rep
    39


    Implicit

    Functia similar_text se preteaza in principiu pentru compararea a doua siruri de caractere si nu are legatura cu interogarea SQL. Posibil sa poata fi utilizata in combinatie cu un query MySQL dar cred ca performanta nu va fi extraordinara in cazul unui numar mare de inregistrari in tabela. Pentru functionarea query-ului din exemplul de mai sus este obligatorie setarea indexului fulltext. De asemenea este obligatoriu ca expresia cautata sa fie cuprinsa intre apostroafe.

    Desigur, pentru optimizarea query-ului in loc de * trebuie trecute doar campurile care vor fi utilizate efectiv. Vizualizarea utilizarii indecsilor la executia unui query se poate face cu utilizarea EXPLAIN inainte de SELECT. Am gasit niste idei interesante pentru optimizarea tabelelor MySQL aici, aici si aici.

  9. #9
    Avatarul lui evolution
    evolution este deconectat Membru SeoPedia
    Reputatie:
    38
    Data înscrierii
    29th October 2006
    Locaţie
    Bucuresti
    Posturi
    997
    Putere Rep
    38


    Implicit

    <?php include ("db.php");?>
    <HTML>
    <HEAD>
    <TITLE> </TITLE>
    <META NAME="Keywords" CONTENT="">
    <META NAME="Description" CONTENT="">
    </HEAD>

    <BODY>

    <?
    $nume_tag=$row["nume_tag"];

    $sql = "select *, MATCH (titlu, description) AGAINST ('nume_tag') AS id_unic
    FROM produs WHERE MATCH (titlu, description) AGAINST ('nume_tag')
    ORDER BY id_unic DESC LIMIT 10";


    $result = mysql_query ($sql);
    while($row = mysql_fetch_array($result)){
    $id_unic=$row["id_unic"];
    $titlu = $row["titlu"];
    $description = $row["description"];

    echo"

    $titlu : $description

    ";}?>

    </BODY>
    </HTML>
    Imi da eroarea: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in line 82 (while($row = mysql_fetch_array($result)){ )

    Cred ca e gresit ceva in cod, o virgula ceva. Am tot schimbat,dar tot asa imi apare .

    Acum folosesc selectul de mai jos in acelasi cod,care nu da eroare(dar nu prea afiseaza rezultate,cum va spuneam)
    $sql = "select * from produs WHERE description LIKE '%$nume_tag%' ORDER BY id_unic DESC LIMIT 20";

  10. #10
    Avatarul lui c_n_m
    c_n_m este deconectat Ambasador
    Reputatie:
    39
    Data înscrierii
    25th February 2006
    Locaţie
    București / Ilfov
    Vârstă
    52
    Posturi
    622
    Putere Rep
    39


    Implicit

    My bad, in exemplul de mai sus trebuia "relevance" in loc de "relevanta" si nu mai era necesara clauza "order by", rezultatele fiind ordonate deja in ordinea descrescatoare a relevantei. Mergand pe exemplul tau, pentru ca sa mearga trebuie procedat in felul urmator:

    <?
    $nume_tag="mere galbene";

    $db_type='mysql';
    $db_user='userul';
    $db_password='parola';
    $db_server='localhost';
    $db_database='bazadedate';

    $conn = mysql_connect($db_server, $db_user, $db_password);
    if ($conn) {
    $sql = "select *, MATCH (titlu, description) AGAINST ('".$nume_tag."') AS relevance FROM produs WHERE MATCH (titlu, description) AGAINST ('".$nume_tag."') LIMIT 10";
    $result = mysql_db_query ($db_database, $sql);
    if ($result) {
    while($row = mysql_fetch_array($result)) {
    $id_unic = $row["id_unic"];
    $titlu = $row["titlu"];
    $description = $row["description"];
    echo "$id_unic : $titlu : $description<br>";
    };
    mysql_free_result($result);
    };
    mysql_close($conn);
    };
    ?>
    Probabil ca in scriptul tau inchiderea si deschiderea bazei de date se face separat (eu le-am pus explicit aici). E bine sa eliberezi memoria dupa citirea din tabela, utilizand mysql_free_result($result).

Pagina 1 din 2 12 UltimulUltimul

Informații subiect

Utilizatori care navighează în acest subiect

Momentan este/sunt 1 utilizator(i) care navighează în acest subiect. (0 membrii și 1 vizitatori)

Thread-uri Similare

  1. Baza de date clienti - PC
    De Dragos Nicu în forumul Bar, lobby...
    Răspunsuri: 6
    Ultimul Post: 6th February 2010, 13:19
  2. Link din baza de date
    De Federals în forumul Server side
    Răspunsuri: 15
    Ultimul Post: 28th June 2009, 20:58
  3. Baza de date :)
    De Sebastian în forumul Bar, lobby...
    Răspunsuri: 3
    Ultimul Post: 9th September 2008, 23:05
  4. Google gaseste si variante de cuvinte cheie?
    De thefan în forumul Google
    Răspunsuri: 5
    Ultimul Post: 14th August 2008, 10:23
  5. Baza de date
    De eRwin în forumul Server side
    Răspunsuri: 5
    Ultimul Post: 26th August 2005, 09:10

Permisiuni postare

  • Nu puteţi posta subiecte noi.
  • Nu puteţi răspunde la subiecte
  • Nu puteţi adăuga ataşamente
  • Nu puteţi modifica posturile proprii
  •