2012-02-15 2 views
5

У меня проблема с запуском запроса select в базе данных. Некоторые из данных проводится в виде списка значений, разделенных запятыми, пример:Запуск выбора в списке значений, разделенных запятыми, в PHP

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

И пример рода вещи я пытаюсь запустить:

<?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); 
?> 

Сценарий выше должен верните строку 1 после нахождения «1» в столбце «Люди», но, я уверен, я ее сбросил.

Проблема, с которой я сталкиваюсь, заключается в том, что я думаю, что у меня есть оператор IN назад, т.е. я ДУМАЮ, что этот метод будет выбирать значения, если $ selection был разделенным запятыми (взорванным) списком, а не способом, которым я пытаюсь использовать его.

Я не знаю, слишком ли важно, что я отправляю и получаю из класса db выше, но если вы хотите знать, это просто простой скрипт, который запускает все соответствующие биты и возвращает массив результата , на данный момент он ничего не возвращает, потому что он не находит ни одного матча

Заранее благодарим за все, что вы можете мне рассказать.

Приветствие -Dave

ответ

16

Почему люди настаивают на этой безумной привычке значений данных, разделенные запятые в колонке, а не правильно нормализации их структуру базы данных. Это всегда приводит к проблемам.

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

или

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

К сожалению, это не моя база данных, я делаю какую-то работу для бизнеса на самом деле устаревшего сайт. Но Cheers, Это работало как шарм. И ужасно быстро;) –

+1

Если это устаревшая база данных, то дросселируйте оригинального дизайнера db для меня :) –

+0

Он на самом деле все еще работает там, но он собирается уйти в отставку, и я не думаю, что он дает хоть один крик. Но я задушу его, тем не менее! –

Смежные вопросы