Получить разделенную запятыми строку из Mysql - PullRequest
0 голосов
/ 02 июня 2011

Я сохраняю строку из PHP в MySQL, как это ..

$groupid = "13, 14, 15, 16"
$write = mysql_query("INSERT INTO table VALUES ('','$groupid')");

Затем я пытаюсь извлечь данные из таблицы, если $ a = "15"

$extract = mysql_query("SELECT * FROM table WHERE ustaffid='$ustaffid' AND groupid='$a'");

Как я могу легко сопоставить то, что в $ groupid, с $ a, извлекая его? Могу ли я сделать это с MySQL?

Ответы [ 5 ]

2 голосов
/ 02 июня 2011

Я не знаю, повлияет ли наличие пробелов в столбцах groupid на функцию MySQL find_in_set, и, как отмечает @PeeHaa, поиск внутри строки медленнее и его трудно оптимизировать с помощью индексов.

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

2 голосов
/ 02 июня 2011

Если $a содержит только один идентификатор, я бы предложил разделить его на несколько записей, потому что поиск по строке (/ select) медленнее.

2 голосов
/ 02 июня 2011

Здесь вы можете использовать функцию find_in_set .

SELECT * 
    FROM table 
    WHERE ustaffid='$ustaffid' 
        AND FIND_IN_SET('$a', groupid) > 0
1 голос
/ 02 июня 2011

Расширяя ответ @ ecchymose, вы можете использовать регулярное выражение вместо LIKE.

SELECT *
FROM table
WHERE ustaffid='$ustaffid'
AND groupid RLIKE '(^|, )$a(, |$)'

Примечание: вам может понадобиться выйти из последней $ с \.

Примечание 2: Это не оптимальное решение. Вы действительно должны иметь отдельную строку для каждого идентификатора (с идентификатором, являющимся первичным ключом).

0 голосов
/ 02 июня 2011
SELECT * 
FROM table 
WHERE ustaffid='$ustaffid' 
AND groupid LIKE '%$a,%'

Но вы должны заканчивать свою строку запятой в конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...