2012-01-10 12 views
35

Ho un caso in cui ottenere il nome della tabella dovrebbe essere da una variabile dell'insieme come:Come selezionare da MySQL dove nome Ping è variabile

SET @ID_1 = (SELECT ID FROM `slider` LIMIT 0,1); 
SET @Cat = (SELECT Category FROM `slider` LIMIT 0,1); 
select * from @Cat where ID = @ID_1 

ma farlo in questo modo MySQL emette un errore, così potrebbe qualcuno spettacolo come posso riuscirci, perché questi sono i miei piccoli passi in MySQL.

risposta

59

Si dovrebbe fare questo con un prepared statement. Qualcosa di simile:

SET @s = CONCAT('select * from ', @Cat, ' where ID = ', @ID_1); 

PREPARE stmt1 FROM @s; 
EXECUTE stmt1; 
DEALLOCATE PREPARE stmt1; 
+0

Un'altra cosa che mostra risulterà solo quando rimuovo DEALLOCATE PREPARE stm1; – Burimi

+0

Soluzione brillante. Mi ha aiutato a risolvere il problema che sto avendo, grazie. –

+0

Cosa fa il 'DEALLOCATE PREPARE'? –