2012-02-15 14 views
5

Tengo un pequeño problema al ejecutar una consulta de selección en una base de datos. Algunos de los datos se mantiene como una lista de valores separados por comas, un ejemplo:Ejecutando una selección en una lista de valores separados por comas en PHP

Table: example_tbl 
| Id | People | Children | 
| 1 | 1,2,3 | 8,10,3 | 
| 2 | 7,6,12 | 18,19,2 | 

Y un ejemplo del tipo de cosas que estoy tratando de ejecutar:

<?php 
    include 'class.php'; 
    $selection = 1; 
    $db = new DbClass; 
    $tbl_name = 'example_tbl'; 
    $sql = "SELECT * FROM $tbl_name WHERE ".$selection." IN People"; 
    $result = $db->query($sql); 
    $print_r($result); 
?> 

El script anterior debe devuelve la fila 1 después de encontrar un '1' en la columna Personas, pero claramente lo he desordenado.

El problema que tengo es que creo que tengo la instrucción IN al revés, es decir, CREO que este método sería seleccionar valores si $ selection fuera una lista separada por comas, en lugar de la forma en que estoy intentando para usarlo

No sé si es demasiado importante sobre lo que estoy enviando y recibiendo de la clase de db anterior, pero si quería saber, es solo un script simple que ejecuta todos los bits relevantes y devuelve una matriz del resultado . en este momento no está devolviendo nada porque no está buscando un partido

Gracias de antemano por cualquier cosa que pueda decirme.

Saludos -Dave

Respuesta

16

¿Por qué la gente insiste en este hábito loco de valores de datos separados por comas en una columna en lugar de normalizar adecuadamente su diseño de base de datos. Es siempre conduce a problemas.

SELECT * 
    FROM $tbl_name 
WHERE CONCAT(',',People,',') LIKE '%,".$selection.",%'"; 

o

SELECT * 
    FROM $tbl_name 
WHERE FIND_IN_SET(".$selection.",People); 
+0

Por desgracia, no es mi base de datos, que estoy haciendo un trabajo para una empresa en un sitio web muy anticuado. Pero Saludos, Eso funcionó como un encanto. Y terriblemente rápido también;) –

+1

Si es una base de datos heredada, entonces estrangula el diseñador de base de datos original para mí :) –

+0

En realidad, todavía está trabajando allí, pero está a punto de jubilarse y no creo que le dé ni un solo pitido. ¡Pero lo estrangularé de todos modos! –

Cuestiones relacionadas