Visualizzazione dei risultati da 1 a 8 su 8

Discussione: query select

  1. #1

    query select

    Ciao a tutti,
    avrei bisogno di un aiuto. Mi trovo con un elenco di parole composte come queste:

    Teatro alla scala
    Teatro di napoli
    pasta al ragu
    ..

    La mia tabella si chiama demo e i campi Autore e Titolo.

    Usando questa query
    Codice PHP:
    $sql mysql_query("SELECT * FROM demo WHERE Autore LIKE '%$Nome%' AND Titolo LIKE '%$Numero%' ORDER BY autore") or die(mysql_error()); 
    posso effettuare ricerche di questo tipo:

    codice:
    teatro
    pol
    al
    Ma non mi dà risultati se provo a scrivere cosi:

    codice:
    teatro scala
    teatro napoli
    Cioè, se scrivo solo tr mi dà teatro ma se provo teatr scal nn mi dà niente, eppure queste parole sono contenute dentro teatro alla scala
    Come posso modificare la query per estendere il campo di ricerca per ogni singolo campo?

  2. #2
    Utente di HTML.it L'avatar di vnt54
    Registrato dal
    Mar 2009
    Messaggi
    500
    Bisogna vedere come valorizzi quei parametri($Nome e $Numero).posta il codice per intero.
    Sono stato nella terra della paura e dei vampiri...in transilvania?NO!..in Banca!

  3. #3
    Ecco il codice intero:

    Codice PHP:
    <form action="insert.php" method="post">
    [b]Nome[/b]<input type="text" name="Nome">
    [b]Numero[/b]<input type="text" name="Numero">
    <input type="Submit">
    </form>

    <?php   
    echo "<table border='1' style='border-collapse: collapse;border-color: silver;'>";   
    echo 
    "<tr style='font-weight: bold;'>";   
    echo 
    "<td width='auto' bgcolor=”#7FFFD4″>[i]ID<i/></td>";   
    echo 
    "<td width='auto' >[i]Nome<i/></td>"; echo "<td width='auto' ></td>"
    echo 
    "<td ></td>"
    echo 
    "</tr>";  

    define('DB_NAME''forms1'); 
    define('DB_USER''root'); 
    define('DB_PASSWORD'''); 
    define('DB_HOST''localhost');  
    $link mysql_connect(DB_HOSTDB_USERDB_PASSWORD);
    if (!
    $link) {     
        die(
    'Could not connect: ' mysql_error()); }   
    $db_selected mysql_select_db(DB_NAME$link); 
    if (!
    $db_selected) {
         die(
    'Can\'t use ' DB_NAME ': ' mysql_error()); }  

    $Nome $_POST['Nome'];
    $Numero $_POST['Numero'];  
    $sql mysql_query("SELECT * FROM demo WHERE Autore LIKE '%$Nome%' AND Titolo LIKE '%$Numero%' ORDER BY autore") or die(mysql_error());    

    while(
    $row=mysql_fetch_array($sql)){      

    echo 
    "<tr>";     
    echo 
    "<td width='auto' bgcolor=”#FF0000 ″>" """[b]"  $row[0] . """<b/>""</td>";     
    echo 
    "<td width='auto'>" "" $row[1] . "" "</td>";     
    echo 
    "<td width='auto'>""</td>";     
    echo 
    "<td width='auto'>" """[i]" $row[2] . "<i/>""" "</td>";          
    echo 
    "</tr>";           

    mysql_close(); 
    ?>

  4. #4
    Devi aggiungere una clausola OR per ogni stringa di ricerca passata. Se ad esempio passi "teatr scal" la query deve diventare del tipo:

    codice:
    SELECT * FROM demo WHERE Autore LIKE '%$Nome%' AND (Titolo LIKE '%teatr%' OR Titolo LIKE '%scal%') ORDER BY autore"
    In pratica se la stringa di ricerca contiene degli spazi devi parserizzarla e ricavare le singole sottostringhe e concatenare alla query un "OR Titolo LIKE '%$substr%' per ciascuna di esse.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    se ho ben capito cosa vuoi ottenere ...
    dovrebbe essere sufficiente fare così:
    Codice PHP:
    ...
    $Nome str_replace(' ''%'$_POST['Nome']);
    $Numero str_replace(' ''%'$_POST['Numero']);  

    $sql mysql_query("SELECT * FROM demo WHERE Autore LIKE '%$Nome%' AND Titolo LIKE '%$Numero%' ORDER BY autore") or die(mysql_error());    
    ... 
    vedo se funge

  6. #6
    @philbert

    Si, funziona bene, grazie mille!

    Ancora una cosetta e poi vi lascio in pace.
    Adesso trova teatr scal ma se volessi trovare?

    codice:
    ttr sal
    In pratica, ttr sal sono lettere presenti in teatro alla scala - esiste un sistema per trovare teatro alla scala digitando solo le lettere presenti nella frase?

    esempio:

    codice:
    sn dt r
    vorrei trovare

    codice:
    sono andato a roma

  7. #7
    Originariamente inviato da elixir1349

    Adesso trova teatr scal ma se volessi trovare?

    codice:
    ttr sal



    puoi provare a fare così:
    Codice PHP:
    $Nome str_replace(' ''%'$_POST['Nome']); 
    $Numero str_replace(' ''%'$_POST['Numero']); 
    $arNome str_split($Nome);
    $arNumero str_split($Numero);

    $Nome='';
    foreach (
    $arNome as $value
    {
       if (
    $value=='%') continue;
       
    $Nome.=$value.'%';

    }

    $Numero='';
    foreach (
    $arNumero as $value
    {
       if (
    $value=='%') continue;
       
    $Numero.=$value.'%';

    }

    $sql mysql_query("SELECT * FROM demo WHERE Autore LIKE '%$Nome' AND Titolo LIKE '%$Numero' ORDER BY autore") or die(mysql_error()); 
    dimme poi se funge

    cmq tieni presente che rischi di avere dei cali pazzeschi di prestazione su db!!!

  8. #8
    @philbert

    Funziona alla grande, grazie!
    Si, ne faccio un uso su dei miei elenchi, spesso mi trovo a cercare nomi e sigle complesse.
    Non supero i 2000 valori al momento.

    Immagino che se google permettesse una ricerca del genere i server si paralizzerebbero..

    Grazie ancora.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.