• User Newbie

    Query strana su database servizi TV

    Ciao a tutti, sono nuovo!
    Lavoro in una tv e ho sentito la necessità di creare un database di archiviazione dove venissero inseriti tutti i riferimenti ai servizi girati e mandati in onda giorno per giorno.
    Tutto questo serve per andare a cercare eventuali interviste o immagini particolari di archivio.
    Ho rispolverato dalle mie sinapsi vecchi ricordi di php.......... un macello, comunque scopiazzando e aggiustando quà e là ho ottenuto un risultato soddisfacente.
    Il nuovo problema è il seguente.
    il DB mysql ha 1 sola tabella con un 15ina di campi ( ci sono voci come. l'operatore che ha eseguito le riprese, la data , il numero del nastro, nome intervistato ed altri).
    Ho inserito 5 campi che riguardano gli intervistati.
    Nel form di ricerca inserisco un testo in un campo text e tramite un menù a tendina scelgo in che campo della tabella cercare tale testo!
    Quando cerco il nome di un intervistato posso vedere solamente quel nome in 1 campo, io vorrei cercare quel nome in tutti i campi intervistato!
    Es:. campi del DB ( ovviamente salto tutti gli altri campi data, id, ecc..)
    1---intervista
    2---intervista1
    3---intervista2
    4---intervista3
    5---intervista4

    Io vorrei che quando scelgo intervista dal menù a tendina mi cerchi il dato in tutti questi campi.........
    Vi posto lo script ...
    i campi di ricerca sono 4 , 2 campo text e 2 menu tendina, li ho messi per stringere un pò le ricerche , es:. cerca "SIMONE" fra gli 'OPERATORI' nel "2011" 'DATA'.

    [php]$cerca e $dato le ho già definite.....
    echo "<form name=cerca action='' method=post>";
    echo "<td >Dato da cercare :<input type="text" name="dato">";
    echo "in <select size=1 name="cerca">
    <option value="zz" >seleziona</option>
    <option value="reporter">reporter</option>
    <option value="nastro">nastro</option>
    <option value="argomento">argomento</option>
    <option value="operatore">operatore</option>
    <option value="redazione">redazione</option>
    <option value="intervista">intervistato</option>
    <option value="data ">data</option>
    </select> ";
    echo "<br>Dato da cercare :<input type="text" name="dato1">";
    echo "in <select size=1 name="cerca1">
    <option value="zz" >seleziona</option>
    <option value="reporter">reporter</option>
    <option value="nastro">nastro</option>
    <option value="argomento">argomento</option>
    <option value="operatore">operatore</option>
    <option value="redazione">redazione</option>
    <option value="intervista">intervistato</option>
    <option value="data ">data</option>
    </select> ";
    echo "<tr><td><input type="submit" value="Invia" name="rubrica">";
    echo "<input type="reset" value="RESET" name="rubrica"></FORM></td></tr></TABLE>";
    // Faccio la query-- da aggiungere se dato1 e cerca1 sono vuoti non vanno considerati
    if($cerca!="zz" and $dato!=""){
    $cerca=mysql_query("Select * from antenna3 where $cerca like '%$dato%'AND $cerca1 LIKE '%$dato1%'ORDER BY data DESC");
    echo "<br>I risultati ottenuti:<br><br>";
    while ($data = mysql_fetch_object($cerca)) [/php]

    Io vorrei che <option value="intervista">intervistato</option>
    vada a cercare su 5 campi............ ma come?
    forse mettendo

    [php]if($Cerca =="intervista") {
    $cerca=mysql_query ("Select * from antenna3 where intervista
    AND intervista1 AND intervista2 AND intervista3
    AND intervista4 like '%$dato%'AND
    $cerca1 LIKE '%$dato1%'ORDER BY data DESC") } else {
    $cerca=mysql_query("Select * from antenna3 where $cerca like '%$dato%'
    AND $cerca1 LIKE '%$dato1%'ORDER BY data DESC");[/php]Ovviamente toglierei dal secondo menù a tendina il valore intervista.
    mmmm, forse ci sono un pò di AND hehehe, diciamo che a logica ci arriverei anche a sapere cosa debba fare lo script, il problema è che non lo sò scrivere!!! Mannaggia a me è quando ho smesso di studiare!

    QUindi, Aiuti! qualcuno che ha qualche idea?


  • Consiglio Direttivo

    Ciao k6blue e benvenuto nel Forum GT. 😉

    Invece degli AND dovresti usare OR dato che cerchi lo stesso valore su 5 campi e ti basta che solo 1 ti restituisca il dato per selezionare il record. 😉
    Qualcosa del genere:
    [php]Select * from antenna3 where (intervista
    LIKE '%$dato%' OR intervista1 LIKE '%$dato%' OR intervista2 LIKE '%$dato%' OR intervista3
    LIKE '%$dato%' OR intervista4 LIKE '%$dato%') AND
    $cerca1 LIKE '%$dato1%'ORDER BY data DESC[/php]Se però posso permettermi un consiglio, o meglio, quello che io avrei fatto al tuo posto, inserirei un altro campo parent_id ed eliminerei i campi intervista numerati lasciandotene uno solo.

    Se per un servizio intervisti 20 persone come fai con solo 5 campi? 🙂

    Quando andrai ad inserire un servizio con n intervistati inserisci il primo record con il primo nominativo degli intervistati, recuperi l'id del record appena inserito e continui gli inserimenti degli altri nominativi, un record alla volta, inserendo l'id del primo record inserito come parent_id dei successivi record dello stesso servizio.

    Domani farai una ricerca su un solo campo e tramite l'id/parent_id saprai sempre qual'è il servizio di riferimento.
    Qualcosa del genere insomma:

    
    **id     campo1     campo2    intervistato              parent_id**
    1      blabla         blabla       Silvester Stallone
    2      blabla         blabla       Marge Simpsons            1
    3      blabla         blabla       Dr. House                     1
    ......
     
    
    ```Più brutalmente, poco gestibile per sviluppi futuri ed altamente sconsigliato, potresti inserire i nomi degli intervistati in un unico campo separati da una virgola. Facendo le ricerche tramite il LIKE ti pesca comunque il nominativo che ti interessa.

  • User Newbie

    OK, ho capito il discorso del parent_id, però così facendo dovrei inserire 3 volte la notizia.....?!?!?
    Ti spiego meglio, Stanley Kubrick fà un servizio a marzo in Irlanda sulle scogliere intervistando Jack Nicholson Shelly Duvall Danny Lioyd utilizzando il nastro n° 110/2011 .
    Quello che interssa a me è il sapere che in quel nastro c'è quel preciso servizio, e in quel servizio ci sono quelle 3 interviste.Non c'è un informazione più importante di un'altra!
    Mettendo il parent_id dovrei inserire lo stesso servizio 3 volte? dove ogni volta metto 1 intervistato? scusa la mia ignoranza ma i tempi in cui studiavo ( pure male musql e php) sono passati da moooolto tempo!!
    Non sò, ma secondo me conviene lasciare i campi intervista separati e lavorare sulla query. che dici?


  • User Newbie

    Allora, rieccomi , questo è quello che ho, dopo un pò di modifiche !!

    [php]<TITLE>CERCA</TITLE>
    <link rel='stylesheet' href='stile.css' type='text/css'>
    <style type="text/css">
    <!--
    body {
    background-color: #999;
    }
    -->
    </style><br>

    <br><br>
    <h1>
    <table width="389" height="167" border="0" align="center">
    <tr>
    <td width="326"><table width="300" border="0" align="center">
    <tr>
    <td align="center"><h2><img src="logo.jpg" alt="" /></h2></td>
    </tr>
    <tr>
    <td align="center" bgcolor="#FFEAEA"><a href="cerca.php"><font color=" blue">
    <b>Cerca un servizio</b></font>
    </a></td>
    </tr>
    <tr>
    <td align="center" bgcolor="#FFEAEA"><a href="RSE/db-rse.php"><font color=" blue">
    <b>modifica un servizio</b></font>
    </a></td>
    </tr>
    <tr>
    <td align="center" bgcolor="#FFEAEA"><a href="index.htm"><font color=" blue">
    <b>Inserisci un servizio</b></font>
    </a></td>
    </tr>
    <tr>
    <td align="center" bgcolor="#AEFFAE"><p> la ricerca per data và effettuata nel formato<br> anno-mese-giorno
    (es. 2009-10-14).<br>
    è possibile cercare solo l anno ( es. 2009 )<br>
    o solo il mese ( es. 2009-10 )<br>Primo campo obbligatorio<br><br>

          <?
          //controlo che se il 2° modulo del form è vuoto prenda gli stessi valori del primo,
          // in modo da non doverli necessariamente compilare tutti e due
          if($cerca1=="zz" and $dato1==""){$cerca1=$cerca and $dato1=$dato;}
                  else {$cerca1=$_POST['cerca1'] and $dato1=$_POST['dato1'];}
    

    $cerca=$_POST['cerca'];
    $dato=$_POST['dato'];

           if($dato==""){echo "<font color=\"red\"><h3>Se scrivi un testo da cercare è meglio!</h3></font><br>";}
           if($cerca=="zz"){echo "<font color=\"red\"><h3>Pirlone!<br>Non hai inserito la categoria</h3></font><br>";}
    

    // richiamo il file di configurazione
    require 'config.php';

    // richiamo connessione a MySQL
    require 'connect.php';

    echo "<table width="100%">";
    echo "<tr>";
    echo "<form name=cerca action='' method=post>";
    echo "<td >Dato da cercare :<input type="text" name="dato">";
    echo "in <select size=1 name="cerca">
    <option value="zz" >seleziona</option>
    <option value="reporter">reporter</option>
    <option value="n">nastro</option>
    <option value="argomento">argomento</option>
    <option value="operatore">operatore</option>
    <option value="redazione">redazione</option>
    <option value="intervista">intervistato</option>
    <option value="data ">data</option>

         </select> ";
    

    echo "<br>Dato da cercare :<input type="text" name="dato1">";
    echo "in <select size=1 name="cerca1">
    <option value="zz" >seleziona</option>
    <option value="reporter">reporter</option>
    <option value="n">nastro</option>
    <option value="argomento">argomento</option>
    <option value="operatore">operatore</option>
    <option value="redazione">redazione</option>
    <option value="intervista">intervistato</option>
    <option value="data ">data</option>
    </select> ";
    echo "<tr><td><input type="submit" value="Invia" name="Antenna3">";
    echo "<input type="reset" value="RESET" name="Antenna3"></FORM></td></tr></TABLE>";
    //provo ad inserire un altro pulsante per visualizzare l'ultimo record inserito
    //echo "<input type="button" value="Ultimo servizio" onclick="javascript:location.href='query_ultimo.php'"></FORM></td></tr></TABLE>";

                                //SELECT id FROM nometabella ORDER BY id DESC LIMIT 0,1
    

    if($cerca!="zz" and $dato!=""){
    $cerca=mysql_query("Select * from antenna3 where $cerca like '%$dato%'AND $cerca1 LIKE '%$dato1%'ORDER BY data DESC");
    echo "<br>I risultati ottenuti:<br><br>";
    while ($data = mysql_fetch_object($cerca))
    {
    $id = stripslashes($data->id);
    $time = stripslashes($data->data);
    $redazione = stripslashes($data->redazione);
    $operatore = stripslashes($data->operatore);
    $reporter = stripslashes($data->reporter);
    $nastro = stripslashes($data->nastro);
    $n = stripslashes($data->n);
    $na = stripslashes($data->na);
    $trak = stripslashes($data->trak);
    $localita = stripslashes($data->localita);
    $luogo = stripslashes($data->luogo);
    $argomento = stripslashes($data->argomento);
    $intervista= stripslashes($data->intervista);
    $inte = stripslashes($data->inte);
    $inter = stripslashes($data->inter);
    $interv = stripslashes($data->interv);
    $intervi = stripslashes($data->intervi);
    $intervis = stripslashes($data->intervis);
    $ore = stripslashes($data->ore);
    $minuti = stripslashes($data->minuti);
    $secondi = stripslashes($data->secondi);
    $frame = stripslashes($data->frame);
    $tg = stripslashes($data->tg);
    $edizione = stripslashes($data->edizione);

    if($id!="") { echo"id : <font color=blue><b>$id</font></b>";}
    if($time!="") { echo"<br>Data : <font color=blue><b>$time</font></b>";}
    if($redazione!="") { echo"<br>redazione: <b><font color=blue>$redazione</font></b>";}
    if($argomento!="") { echo"<br>argomento: <b><font color=blue>$argomento</font></b>";}
    if($intervista!="") { echo"<br>intervista: <b><font color=blue>$intervista</font></b>";}
    if($inte!="") { echo"<br>intervista1: <b><font color=blue>$inte</font></b>";}
    if($inter!="") { echo"<br>intervista2: <b><font color=blue>$inter</font></b>";}
    if($interv!="") { echo"<br>intervista3: <b><font color=blue>$interv</font></b>";}
    if($intervi!="") { echo"<br>intervista4: <b><font color=blue>$intervi</font></b>";}
    if($intervis!="") { echo"<br>intervista5: <b><font color=blue>$intervis</font></b>";}
    if($operatore!="") { echo"<br>operatore: <b><font color=blue>$operatore</font></b>";}
    if($reporter!="") { echo"<br>reporter: <b><font color=blue>$reporter</font></b>";}
    if($nastro!="") { echo"<br>nastro tipo: <b><font color=orange>$nastro</font></b>";}
    if($n!="") { echo"numero: <b><font color=blue>$n</font></b>";}
    if($na!="") { echo"/ <b><font color=blue>$na</font></b>";}
    if($trak!="") { echo"traccia: <b><font color=blue>$trak</font></b>";}
    if($tg!="") { echo"<br>edizione TG del: <b><font color=blue>$tg</font></b>";}
    if($edizione!="") { echo"/ <b><font color=blue>$edizione</font></b> ";}
    if($ore!="") { echo"<br>Time code: <b><font color=blue>$ore</font></b> ";}
    if($minuti!="") { echo": <b><font color=blue>$minuti</font></b> ";}
    if($secondi!="") { echo": <b><font color=blue>$secondi</font></b> ";}
    if($frame!="") { echo": <b><font color=blue>$frame</font></b>";}

    echo "<br><br>----------------------------<br><br>";

    }

    }

    ?>
    </p></td>
    </tr>
    </table></td>
    <td width="53"><table width="214" border="0">
    <tr>
    <td width="853" bgcolor="#999"><img src="back1.jpg" alt="" width="208" height="247" /></td>
    </tr>
    </table></td>
    </tr>
    </table>

    [/php]hehhe, sono consapevolissimo che è un bordello allucinante, ma non mi è riuscito a fare di meglio! modifiche , snellimenti o altro sono ben accetti.
    pensavo di fare il form di ricerca in una pag diversa da quella dello script php, ma così funziona.

    Ricapitolando, le cose che vorrei aggiungere sono :
    un sinstema che mi permetta di cercare un dato su 5 campi del db se viene seleziona la voce interviste!
    e poi mi piacerebbe inserire u pulsante ( possibilmente a parte ) che mi stampasse l'ultimo record inserito.

    grazie per ora!

    PS: se volete vedere come funziona il tutto il link è info[dot]k6blue[dot]it[slash]A3


  • Consiglio Direttivo

    Allora, dato che hai un dato univoco per tutta l'intervista, invece di parent_id, lasciando sempre 1 campo "Intervistato", inserisci un campo con il numero nastro. 😉
    Così facendo hai un sistema di raggruppamento, il numero nastro, e quando dovrai fare delle ricerche non avrai beghe di cercare l'intervistato su più campi. 🙂


  • User Newbie

    @Samyorn said:

    Allora, dato che hai un dato univoco per tutta l'intervista, invece di parent_id, lasciando sempre 1 campo "Intervistato", inserisci un campo con il numero nastro. 😉
    Così facendo hai un sistema di raggruppamento, il numero nastro, e quando dovrai fare delle ricerche non avrai beghe di cercare l'intervistato su più campi. 🙂

    Bene, grazie mille per l'interesse che presti al mio progettino..
    ma........ non ho mica capito molto cosa intendi!!!:x
    Oltre ad essere duro di comprendonio sono pure una ciofeca a programmare!
    fammi l'esempio di inserimento con l'esempio che ho fatto io prima di kubrick in irlanda e i 3 intervistati (mannaggia sembra di giocare a cluedo)!!

    grazie mille ancora.


  • Consiglio Direttivo

    Mrs. Scarlet, in Sala da Pranzo, con il Candelabro!!!

    Ah, no scusa, mi son confuso. 😄

    
    **id     reporter                    Nastro           ...      Intervistato**
    1      Stanley Kubrick          110/2011        ...      Jack Nicholson
    2      Stanley Kubrick          110/2011        ...      Shelly Duvall     
    3      Stanley Kubrick          110/2011        ...      Danny Lioyd
    ......
     
    
    ```Pensavo a qualcosa del genere. ;)
    
    > Bene, grazie mille per l'interesse che presti al mio progettino..Siam quì anche per questo. ;)
    > ... sono pure una ciofeca a programmare!Se riesco a fare qualcosina io nei ritagli di tempo... ;)

  • User Newbie

    [..]

    Ho capito cosa intendi, ma facendo così quando io vado a cercare che servizio ha fatto stanley in quella data lui cosa mi dà? 3 risultati? 1 per ogni intervistato? non diventa un pò macchinoso?

    questo è il link infok6blueit\A3\cerca*php
    cos' puoi provare in prima persona!
    nella query ho messo i %% qundi puoi scrivere anche solamente una lettera!


  • Consiglio Direttivo

    La query in questo caso tirerà su 3 record ma dato che l'unica distinzione tra i tre record sarà l'intervistato ti cicli solo quel campo.

    Ti ripeto il mio è un consiglio, magari potresti lavorare su due tabelle distinte interrogando la seconda solo quando cerchi l'intervistato, ma ti si complicherebbe ancora di più la vita.

    Tutto sta a come vuoi organizzarti. Nel sistema utilizzato attualmente sei limitato ai 5 campi intervistato e, a parte complicarti la vita nel cercare un dato su 5 campi, sei limitato a quei soli 5.

    Sta a te la scelta. 🙂


  • User Newbie

    Bene, diciamo che il numero degli intevistati i un servizio generalmente è 1 o 2 persone, a volte 3 ma 5 sono casi veramente eccezionali e se si presentasse quell'incognita rarissima di avere più di 5 interviste allora posso anche inserire 2 volte il servizio!

    Quindi tornando allo script, secondo te , come potrei risolverlo quel discorso della ricerca nei 5 campi?
    e poi m è venuta in mente un'altra boiosità!!! vorrei mettere un pulsante ,a finaco di invia e reset, che mi recuperi l'ultimo record inserito, secondo te come potrei fare?
    io ho provato a mettere un input type button ma poi non sò come inserire la query!!!!
    mannaggia a me!


  • Consiglio Direttivo

    Come ti scrivevo prima la query dovrebbe essere qualcosa del genere:

    Select * from antenna3 where (intervista 
    LIKE '%$dato%' OR intervista1 LIKE '%$dato%' OR intervista2 LIKE '%$dato%' OR intervista3 
    LIKE '%$dato%' OR intervista4 LIKE '%$dato%') AND 
    $cerca1 LIKE '%$dato1%'ORDER BY data DESC 
    

    Per recuperare invece l'ultimo record inserito puoi fare una select ordinando gli id in senso discendente (DESC) ed inserire il parametro LIMIT 1, così avrai solo il primo record della select che, dato l'ordinamento, non sarà altro che l'ultimo. 😉