Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    problema query multipla

    Un saluto a tutto il forum, mi sono appena iscritto e volevo chiedere un piccfolo aiuto per il mio problemino.

    vi spiego il tutto:

    sto realizzando una pagina in php che mi permetta di fare ricerche all'interno del mio database sql.

    attualmente funziona tutto ma solo se nella query metto una tabella, siccome il mio database a 5 tabelle non so appunto come far cercare una determinata parola in tutti e 5 contemporaneamente.

    in più ho aggiunto 5 link che poi sarebbero le immagini che vedete (iso, film, musica ecc ecc) che attualmente devo usare perchè la ricerca non funziona ancora su tutte le tabelle.

    vi scrivo i file che utilizzo:




    nome file search.php

    <?
    $host="localhost";
    $user="*****";
    $password="*****";
    $database="*****";
    ?>
    <style type="text/css">
    <!--
    .Stile1 {color: #FFFFFF}
    .Stile4 {font-size: 12px}
    -->
    </style>
    </head>
    <body bgcolor="#000000">


    </p>
    <table width="500" border="0" align="center" cellpadding="0" cellspacing="0">
    <tr>
    <td colspan="5"> [img]img_up.png[/img] </td>
    </tr>
    <tr bgcolor="#003366">
    <td width="70" height="52" bgcolor="#330033"> <div align="center">
    <p class="Stile1"> <span class="Stile4">Iso</span> </p>
    <p class="Stile1"> [img]iso.png[/img] </p>
    </div> </td>
    <td width="70" bgcolor="#330033"> <div align="center">
    <p class="Stile1"> <span class="Stile4">Game</span> <span class="Stile4">s</span> </p>
    <p class="Stile1"> [img]giochi.png[/img] </p>
    </div> </td>
    <td width="70" bgcolor="#330033"> <div align="center">
    <p class="Stile1"> <span class="Stile4">Programmi</span> </p>
    <p class="Stile1"> [img]programmi.png[/img] </p>
    </div> </td>
    <td width="70" bgcolor="#330033"> <div align="center">
    <p class="Stile1"> <span class="Stile4">Film</span> </p>
    <p class="Stile1"> [img]film.png[/img] </p>
    </div> </td>
    <td width="70" bgcolor="#330033"> <div align="center">
    <p class="Stile1"> <span class="Stile4">Musica</span> </p>
    <p class="Stile1"> [img]musica.png[/img] </p>
    </div> </td>
    </tr>
    <tr>
    <td colspan="5"> [img]img_center.png[/img] </td>
    </tr>
    <tr>
    <td colspan="5" bgcolor="#330033">
    <form method="POST" action="<?php echo $_SERVER['PHP_SELF'] ?>">
    <p align="center" class="Stile1"> <span class="Stile4"> Parola da ricercare:
    <input type="text" size="25" name="keywords">
    <input type="submit" name="search" value="cerca">
    </form> </td>
    </tr>
    <tr>
    <td colspan="5"> [img]img_center.png[/img] </td>
    </tr>
    <tr>
    <td colspan="5" bgcolor="#330033">
    <p align="left" class="Stile1"> <span class="Stile4">
    <?php
    if ($_POST['search']){
    if (!empty($_POST['keywords'])) {
    $searchStr = $_POST['keywords'];
    if (ereg("^[a-zA-Z ]+$", $searchStr)) {
    mysql_connect($host,$user,$password)or die("
    non riesco a connettermi");
    mysql_select_db($database)or die("
    non riesco selezionare il database");
    print "
    Risultati per "$searchStr"

    ";
    $keys = explode(" ", $searchStr);
    for ($x = 0; $x < count($keys); $x++) {
    $querystr = "SELECT * FROM FILE_VIDEO WHERE DESCRIZIONE = "$keys[$x]" OR DESCRIZIONE LIKE "%$keys[$x]%"";
    $result = mysql_query($querystr);
    if ($frow = mysql_fetch_array($result)) {
    $found = true;
    do {
    echo " File - " . $frow["DESCRIZIONE"] . " - Size - ".$frow["DIMENSIONE_KB"]." - Tipo - ".$frow["ESTENSIONE"]."

    ";
    } while ($frow = mysql_fetch_array($result));
    }
    }
    if (!$found) {
    print("
    Nessun risultato
    ");
    }
    }
    else {
    print("
    La tua parola di ricerca contiene caratteri illegali
    ");
    }
    }
    else {
    print("
    Devi inserire una parola di ricerca
    ");
    }
    }
    ?>
    <p align="center" class="Stile1"> </td>
    </tr>
    <tr>
    <td colspan="5"> [img]img_down.png[/img] </td>
    </tr>
    </table>
    </body>
    </html>


    il mio sql è strutturato come segue:

    nome database:
    file_share

    nomi tabelle:
    FILE_ISO FILE_PROGRAMMI FILE_GAMES FILE_AUDIO FILE_VIDEO


    All'interno delle singole tabelle ci sono questi campi:
    ID DESCRIZIONE ESTENSIONE DIMENSIONE_KB DATA ORA


    io vorrei che la ricerca venisse fatta contemporaneamete su tutte le 5 tabelle del database e solo per il campo DESCRIZIONE e fosse ordinata per ID


    ormai sono arrivato fino a quì e mi piacerebbe finire il file, ma purtroppo io non faccio il programmatore e mi devo arrendere all'evidenza.

    ringrazio tutti comunque anticipatamente per il vostro aiuto, con la speranza che mi possiate aiutare.

    grazie

  2. #2
    scusa l'appunto, ma la prossima volta se scrivi solo la parte di codice interessata è meglio
    comunque la cosa che ti serve è fare una INNER JOIN delle tabelle, cioe' il problema è nella query in SQL.

    prova a guardare questo:
    http://www.w3schools.com/SQl/sql_join_inner.asp


    se non riesci, scrivimi che appena ho un attimo ti scrivo io la query giusta.

    ciao ciao
    Quanti programmatori sono necessari per cambiare una lampadina?
    Nessuno, e' un problema hardware.

  3. #3

    CREARE QUERY

    Grazie per il tuo aiuto, ma purtroppo non riesco a creare questa query benedetta, potresti aiutarmi a crearla?

    la query si vede anche nel listato sopra ma te la riporto quì sotto:

    $querystr = "SELECT * FROM FILE_VIDEO WHERE DESCRIZIONE = \"$keys[$x]\" OR DESCRIZIONE LIKE \"%$keys[$x]%\"";

    il problema è che così come è composta io non sono in grado di modificarla come descritto nel link che mi hai suggerito, ci sno variabili che non so cosa fanno.

    in attesa di una tua risposta ti ringrazio ancora tanto.

    ciao

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Se vuoi fare una ricerca su più tabelle devi ricorrere alle union

    codice:
    SELECT * FROM FILE_VIDEO WHERE DESCRIZIONE like "%quello_che_vuoi%"
    union 
    SELECT * FROM tabella2 WHERE DESCRIZIONE like "%quello_che_vuoi%"
    union 
    SELECT * FROM tabella3 WHERE DESCRIZIONE like "%quello_che_vuoi%"
    union
    SELECT * FROM tabella4 WHERE DESCRIZIONE like "%quello_che_vuoi%"
    union
    SELECT * FROM tabella5 WHERE DESCRIZIONE like "%quello_che_vuoi%"
    Resta il fatto che anzichè ricorrere a 5 tabelle diverse, se queste hanno tutte la stessa struttura, sarebbe più corretto usarne una sola con un campo che specifica la tipologia.

  5. #5

    risolto non completamente

    ciao a tutti, alla fine ho optato per questa soluzione di queri multipla:



    $querystr = "select * from FILE_ISO where DESCRIZIONE = \"$keys[$x]\" OR DESCRIZIONE LIKE \"%$keys[$x]%\"
    UNION ALL
    select * from FILE_GIOCHI where DESCRIZIONE = \"$keys[$x]\" OR DESCRIZIONE LIKE \"%$keys[$x]%\"
    UNION ALL
    select * from FILE_PROGRAMMI where DESCRIZIONE = \"$keys[$x]\" OR DESCRIZIONE LIKE \"%$keys[$x]%\"
    UNION ALL
    select * from FILE_VIDEO where DESCRIZIONE = \"$keys[$x]\" OR DESCRIZIONE LIKE \"%$keys[$x]%\"
    UNION ALL
    select * from FILE_AUDIO where DESCRIZIONE = \"$keys[$x]\" OR DESCRIZIONE LIKE \"%$keys[$x]%\"";



    diciamo che funziona mi cerca i titoli che scrivo senza problemi, ma se nel box ricerca faccio spazio poi invio mi scarica tutte le tabelle e vorrei non lo facesse perchè avendo circa 10000 file mi si pianta tutto.


    come posso riolvere il problema tenendo conto che ci sono alcuni titoli che hanno lo spazio.

    esempio se cerco il titolo LA MAMMA con lo spazio tra le due parule mi dice che ho inserito un carattere non valido se cerco MAMMA mi trova il titolo ma la ricerca non essendo più mirata mi tira fuori altri titoli, esempio MAMMARELLA, MAMMA MIA, MATTO ecc ecc.

    bisognerebbe modificare meglio questa parte di file:


    if ($_POST['search']){
    if (!empty($_POST['keywords'])) {
    $searchStr = $_POST['keywords'];
    if (ereg("^[a-zA-Z0-9 ]+$", $searchStr))



    ringrazio ancora per il supporto che date al forum

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.