¿Seleccionar todas las columnas que comienzan con XXX usando un comodín?

Tengo varias columnas en mis bases de datos con nombres similares. ¿Cómo selecciono aquellos basados ​​en la palabra con la que comienzan? Aquí hay un diseño de tabla de ejemplo: enter image description here

Intenté seleccionar toda la información para una cosa en particular (tipo de comida en este ejemplo) usando

$Food = "Vegetable"; mysql_query("SELECT `" . $Food . " %` FROM `Foods`"); 

pero no pareció funcionar.

Cualquier ayuda sería apreciada 🙂

EDITAR: Aparentemente esto no estaba claro en mi ejemplo, pero ya conozco todas las primeras palabras de la columna. Las columnas son siempre iguales y nunca se agregan ni eliminan “tipos de alimentos”. La variable PHP solo está ahí para determinar cuál de un par de tipos de conjuntos necesito.

No hay forma de hacer exactamente lo que estás tratando de hacer. Primero puede hacer otra consulta para buscar todos los nombres de columna, luego procesarlos en PHP y generar la segunda consulta, pero eso es probablemente más complejo que simplemente escribir los nombres que desea.

¿O hay un motivo por el cual esta consulta debe ser dinámica? ¿La estructura de la mesa cambiará a menudo?

Tendría que construir el SQL dinámicamente. Como punto de partida, esto te daría los nombres de las columnas que estás buscando.

 SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'Foods' AND table_schema = 'YourDB' AND column_name LIKE 'Vegetable%' 

Esta es una forma en que lo hice puramente con MySQL:

 SET SESSION group_concat_max_len = 2048; SELECT GROUP_CONCAT(CONCAT(" ",CAST(column_name as CHAR(50)))) FROM information_schema.columns WHERE table_name='real_big_table' AND column_name LIKE 'prefix%' INTO @sub; SET @x = CONCAT("SELECT ",@sub," FROM my_db.real_big_table WHERE my_db.real_big_table.country_id='US'"); PREPARE stmt FROM @x; EXECUTE stmt; 

Mi respuesta está inspirada por esta respuesta .

Nota: Mi ‘DBA interno’ (en forma de un pequeño ángel en mi hombro) me dice que la necesidad de hacer esto es probablemente un signo de mala estructura de BD, pero mi ‘hacker interno’ (en forma de un pequeño diablo en mi otro hombro) dice “¡solo hazlo!”

Convierta su base de datos a una con tres columnas:

 Product_type (vegetable, fruit, etc) Name (apple, carrot, etc) color (orange, yellow, etc) 

Ahora puede usar su comodín para obtener solo un cierto tipo, porque ahora está en una columna, no en el encabezado.

¿Qué tal crear la consulta en 2 pasos?

1- Obtener el nombre de la columna del esquema db (o en otro lugar)

2- Genera una consulta sql con el nombre de la columna que coincida con tu condición de filtro.

    Intereting Posts