Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura
Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura
Il primo Micro RGB di Samsung per il salotto è il 65 pollici da 2.749 euro. Sul banco di misura abbiamo rilevato 2.000 nit di picco, nero assoluto con il local dimming e il 91,4% del BT.2020, il colore più ampio che abbiamo misurato su un LCD
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
Apple ha rinnovato iPhone 18 Pro soprattutto dentro: chip A20 Pro a 2 nm con memoria affiancata al SoC, camera di vapore tre volte più ampia, Dynamic Island più piccola del 25% grazie a Face ID sotto il display e fotocamera principale con diaframma variabile da f/1.48 a f/4. Lo abbiamo misurato al colorimetro e nei benchmark, usato con iOS 27 e messo alla prova in fotografia tra laghi, borghi e interni poco illuminati
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
A Londra, per il trentennale dei Toughbook, Panasonic ha presentato il tablet G3 e il 2-in-1 34. Con Jon Tucker, a capo dell'ingegneria europea, abbiamo parlato di ciò che non si vede: batterie, antenne, porte seriali e accorgimenti nati sul campo
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-11-2009, 18:34   #1
kurts
Senior Member
 
L'Avatar di kurts
 
Iscritto dal: Oct 2009
Città: Varese
Messaggi: 307
[PHP+MySQL]

ciao a tutti!
sto realizzando una piccola applicazione per la gestione della mia biblioteca personale.
per la memorizzazione dei libri mi appoggio ad un DB MySQL, la tabella LIBRI è strutturata enl modo seguente:
Codice:
id, int(3)
titolo varchar(100)
autore varchar(50)
volume int(1)
scaffale varchar(3)
tag varchar(100)
ora, la situazione è la seguente:
-la ricerca per titolo funziona
-la ricerca per autore funziona
-la ricerca per tag... la ricerca per tag???

come posso implementare questa maledetta ricerca per tag??
dunque, facciamo chiarezza, il campo tag memorizza i dati in questo formato:
Codice:
,tag1,tag2,tag3,...,
nel form di ricerca, il campo "tag" il formato utilizzato è lo stesso.

io avevo pensato di:
-prendere il contenuto di $_POST['tag']
-fare un explode(',', $_POST['tag'])
-poi con un ciclo creo una query con tanti LIKE quanti sono gli elementi dell'array ottenuto dall'explode legati con degli OR

Codice:
SELECT i_campi_che_voglio FROM libri WHERE tag LIKE ',storia,' OR tag LIKE ',commedia,' OR tag LIKE ',biografia,' OR tag LIKE ...


questa soluzione dovrebbe funzionare ma mi pare comunque che sia una cosa molto grezza
non esistono metodi più eleganti per raggiungere lo scopo?

P.S.: forse la lunghezza di titolo ed autore sono un po' eccessive, lasciamo stare per adesso.
kurts è offline   Rispondi citando il messaggio o parte di esso
Old 14-11-2009, 21:05   #2
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
La butto lì... non è che magari non va implementato così il campo tag, ma va creata una tabella apposita, dove metterai tutte le tag create, con rispettivo libro collegato?

Codice:
|	tag 		|	id_libro	|
|-----------------------|-----------------------|
|	disney 		|	3	        |
|	disney 		|	120	 	|
|	horror 		|	27	 	|

Ultima modifica di MEMon : 14-11-2009 alle 21:10.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 14-11-2009, 21:30   #3
kurts
Senior Member
 
L'Avatar di kurts
 
Iscritto dal: Oct 2009
Città: Varese
Messaggi: 307
umh... è vero, non ci avevo nemmeno pensato
però, scusa, se cerco più di un tag alla volta, ad esempio sto cercando un libro di guerra ambientato nel futuro e scritto in inghilterra ho sempre una query di questo tipo:
Codice:
SELECT id_libro FROM MEMon_table WHERE tag='guerra' OR tag='futuro' OR tag='inghilterra'
insomma, non è che finisce che rimpiazzo i LIKE con gli = ?

ad ogni modo ora mi creo sicuramente la tabella come hai consigliato tu ma il problema della query chilometrica rimane

-----EDIT-----
ahhhh ho capito!!!
dici di fare così in modo che poi si possa usare l'IN?? hai ragione, scusa il mio iniziale scetticismo, sotto sotto sapevo che mi sfuggiva qualcosa, ora ci sono arrivato pure io.
grazie mille!

Ultima modifica di kurts : 14-11-2009 alle 21:32.
kurts è offline   Rispondi citando il messaggio o parte di esso
Old 14-11-2009, 21:35   #4
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Beh si è ovvio che per cercare un libro indicando più tag c'è bisogno di metterle tutte, ma mica è un problema, e non è neppure una query chilometrica, rimane comunque una microquery, le query chilometriche son ben altre, e credimi, una query è quasi sempre chilometrica
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 14-11-2009, 21:37   #5
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Quote:
Originariamente inviato da kurts Guarda i messaggi
-----EDIT-----
ahhhh ho capito!!!
dici di fare così in modo che poi si possa usare l'IN?? hai ragione, scusa il mio iniziale scetticismo, sotto sotto sapevo che mi sfuggiva qualcosa, ora ci sono arrivato pure io.
grazie mille!
Ho visto ora l'edit, avendo una tabella a se stante puoi sfruttare tutte le potenzialità di una query, IN compreso.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 14-11-2009, 22:55   #6
kurts
Senior Member
 
L'Avatar di kurts
 
Iscritto dal: Oct 2009
Città: Varese
Messaggi: 307
non so se vi può interessare (credo di no), nel dubbio io condivido!
questo è il file ricerca.php
Codice PHP:
<?php
if (isset($_POST['submit'])&&(!empty($_POST['autore'])||!empty($_POST['titolo'])||!empty($_POST['tag']))){    //inizio report
    
require('functions.inc.php');

    echo 
'<h3>REPORT:</h3>';
    
    
$dbconn=connectDB();
    if(
$dbconn!=1){echo $dbconn;}
    
    
$codquery=0;
    
$codtagquery=0;
    
    if (!empty(
$_POST['titolo'])){
        
$queryta="SELECT id_libro FROM libri WHERE titolo LIKE '%".$_POST['titolo']."%'";
        
$codquery=1;
    }
    if (!empty(
$_POST['autore'])){
        if (
$codquery==1){
            
$queryta.=" AND autore LIKE '%".$_POST['autore']."%'";
        }
        else{
            
$queryta="SELECT id_libro FROM libri WHERE autore LIKE '%".$_POST['autore']."%'";
            
$codquery=1;
        }
    }
    
    if (!empty(
$_POST['tag'])){
        
$tag=str_replace(",", "','", $_POST['tag']);
        
$tagquery="SELECT id_libro FROM tag_table WHERE tag IN ('".$tag."')";
        
$codtagquery=1;
    }
    if(
$codquery+$codtagquery==2){
        
$query=$queryta.' INTERSECT '.$tagquery;
    }
    else{
        if(
$codquery==1){
            
$query=$queryta;
        }
        else{
            
$query=$tagquery;
        }
    }
    
$result=mysql_query($query);    //dati ottenuti in base alla combinazione delle 2 query
    
if(@mysql_num_rows($result)){
        
$infoquery="SELECT * FROM libri WHERE id_libro IN ('0'";    //ottengo i dati in base agli id
        
while($id=mysql_fetch_array($result)){
            
$infoquery.=",'".$id[0]."'";
        }
        
$infoquery.=")";
        
$infoquery=mysql_query($infoquery);
        echo
'<table border=1>';
        echo 
'<tr><td>Titolo</td><td>Autore</td><td>Volume</td><td>Scaffale</td></tr>';
        while(
$info=mysql_fetch_array($infoquery)){
            echo 
'<tr><td>'.$info[1].'</td><td>'.$info[2].'</td><td>'.$info[3].'</td><td>'.$info[4].'</td></tr>';
        }
        echo
'</table>';
    }
    else{
        echo 
"<p>Nessun risultato.</p>";
    }

    
}    
//fine report

else{    //form di ricerca
?>

<form name="datiUtenti" action="ricerca.php" method="POST">
    Titolo:    <input type="text" name="titolo"/><br/>
    Autore:    <input type="text" name="autore"/><br/>
    Tag:    <input type="text" name="tag"/><br/>
    <br/>
    <input type="hidden" name="submit" value="ok"/><br/>
    <input type="submit" value="CERCA"/>
</form>

<?php
}    //fine form di ricerca
?>
se avete dei consigli sappiate che vi ascolto.

P.S.: lasciate pure perdere le consigerazioni riguardanti la sicurezza e la grafica, l'applicazione dovrò girare su un computer che non avrà proprio fisicamente accessso alla rete e soprattutto visualizzerà le pagine tramite riga di comando, al massimo potrei usare le tabelle per un'impaginazione un grossolana
kurts è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura Samsung Micro RGB R95H, il primo LCD a LED rossi...
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre iPhone 18 Pro: la recensione del miglior iPhone ...
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34 Panasonic, 30 anni di Toughbook: la "Bibbia...
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione realme C100x, lo smartphone economico con la bat...
Star Wars Zero Company è l'erede di XCOM 2 Star Wars Zero Company è l'erede di XCOM ...
Steve Jobs, 15 anni dopo: John Ternus e ...
LaLiga chiede all'Europa di inserire qua...
Microsoft festeggia cinque anni di Windo...
WhatsApp blocca l'accesso sui telefoni n...
AMD non riesce a stare dietro alla doman...
Android Auto: stop alla compatibilità pe...
Più delle montagne russe: Six Fla...
Dopo Sapphire, anche Gigabyte rilascia a...
Motorola in offerta Prime Day: moto g57 ...
Lenovo in offerta Prime Day: IdeaPad S5 ...
Evento Apple del 13 ottobre: fra i nuovi...
FRITZ! in offerta Prime Day: Repeater 27...
GMK TriggerKey: un mod kit per maggiore ...
RTX Spark deve ancora debuttare, ma AMD ...
Robot aspirapolvere Prime Day: i prezzi ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 12:21.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v