PDA

Visualizza la versione completa : Effettuare una ricerca su più campi omonimi di tabelle diverse


Gas75
21-05-2020, 17:37
Salve, ho un semplice motore di ricerca che trova una o più parole presenti nel campo Titolo di una tabella.
Vorrei che la stessa ricerca fosse estesa in automatico ad altre due tabelle, con la medesima struttura, sempre nei rispettivi campi Titolo.
E' possibile?

Questo è il codice, attualmente funzionante sulla tabella schede (omessi dei controlli sui caratteri speciali...):

@mysqli_select_db($link, "$db_name");
$testo=isset($_POST['testo']) ? htmlspecialchars($_POST['testo']) : '';
$testo=str_replace("'","''",$testo);

...

$sql = "SELECT * FROM schede WHERE Titolo LIKE '%$testo%' ORDER BY Anno ASC";

optime
21-05-2020, 18:10
puoi usare UNION

SELECT * FROM tabella1
UNION
SELECT * FROM tabella2

Gas75
22-05-2020, 13:07
Perfetto, grazie.:ciauz:

Avendo delle clausole WHERE, l'UNION occorre farlo su ciascun SELECT, sennò stampa tutto il db!:eek:

optime
22-05-2020, 15:10
optime!

Gas75
13-06-2020, 09:42
Ho notato un problema effettuando la ricerca su più tabelle: oltre ai vari campi ove è presente la chiave di ricerca, devo ottenere anche il nome della tabella poiché i risultati di ricerca producono anche un link

$link="scheda.php?Tabella=$tabella&Anno=$anno&Numero=$albo";
e quindi

echo "<div class='col-3'><a href='$link'>Scheda</a></div>";

Come faccio a interrogare il database circa le tabelle dove sono presenti i risultati?:confused:

optime
13-06-2020, 10:29
SELECT 'tabella1' as tabella, * FROM tabella1
UNION
SELECT 'tabella2' as tabella, * FROM tabella2

that easy!

optime
13-06-2020, 10:52
SELECT 'tabella1' as tabella, * FROM tabella1
UNION
SELECT 'tabella2' as tabella, * FROM tabella2

that easy!

Gas75
13-06-2020, 12:12
$cerca = mysqli_query($link, $sql)
mi va in die.:(

optime
13-06-2020, 12:38
perché non posti la TUA stringa SQL?

Gas75
13-06-2020, 16:42
Eccola...

$sql = "SELECT 'schede' AS Tabella, * FROM schede WHERE Titolo LIKE '%$testo%' UNION SELECT 'speciali' AS Tabella, * FROM speciali WHERE Titolo LIKE '%$testo%' UNION SELECT 'numeriuno' AS Tabella, * FROM numeriuno WHERE Titolo LIKE '%$testo%' ORDER BY Anno ASC";

Loading