Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo
Per diversi giorni il Galaxy S26 Ultra di Samsung è stato il nostro compagno di vita. Oltre alle conferme del colosso coreano come la qualità del display e una suite AI senza rivali, arriva il Privacy Display, un unicum nel mondo smartphone. Ci sono ancora alcuni gap che non sono riusciti a colmare lato batteria e fotocamera, seppur con alcuni miglioramenti.
Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Abbiamo provato per voi il nuovo DLC lanciato a sorpresa da Blizzard per Diablo II: Resurrected e quella che segue è una disamina dei nuovi contenuti che abbiamo avuto modo di sperimentare nel corso delle nostre sessioni di gioco, con particolare riguardo per la nuova classe dello Stregone
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Siamo tornati nel parco tecnologico di Trieste per il kick-off del programma che mette a disposizione di cinque startup le infrastrutture di ricerca, dal sincrotrone Elettra ai laboratori di genomica e HPC. Roberto Pillon racconta il modello e la visione
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-11-2009, 19: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, 22: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 22:10.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 14-11-2009, 22: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 22:32.
kurts è offline   Rispondi citando il messaggio o parte di esso
Old 14-11-2009, 22: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, 22: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, 23: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


Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo Recensione Samsung Galaxy S26 Ultra: finalmente ...
Diablo II Resurrected: il nuovo DLC Reign of the Warlock Diablo II Resurrected: il nuovo DLC Reign of the...
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup Deep Tech Revolution: così Area Science P...
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo HP OMEN MAX 16 con RTX 5080: potenza da desktop ...
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta Recensione Google Pixel 10a, si migliora poco ma...
Microsoft porta l'assistente AI Gaming C...
ROG Xbox Ally: sta per arrivare il suppo...
Ultimo giorno di Offerte di Primavera: u...
Come ha fatto Giancarlo Devasini a diven...
Dopo 13 anni cade la fortezza Xbox One: ...
Gli aggiornamenti delle stampanti HP che...
AWS al MWC 2026: quando il cloud diventa...
Project Genie non è un tool per l...
Elon Musk, il progetto TeraFab è ...
Instagram eliminerà la crittograf...
Il paradosso della crisi delle memorie: ...
SSD Samsung 9100 PRO 4TB, 14.800 MB/s, P...
Prezzo senza rivali: MSI Katana con RTX ...
Samsung T7 2TB crolla su Amazon a 159€: ...
Spotify introduce 'Taste Profile': il co...
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: 10:29.


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