2016-08-26 2 views
0

Я создал группу пользователей и таблицу пользователей в моей базе данных, которая называется test и user_test. У каждого пользователя есть поле groups, которое содержит как минимум одно число, но может также содержать несколько номеров, например 1,2,3. Таблица групп пользователей существует id и group_name.PHP - Поиск нескольких строк с числами/запятыми

То, что я так долго пытаюсь сделать, - получить данные от всех групп, которым назначен этот пользователь. Например, если одному пользователю назначены группы 1,2,3 (как показано в базе данных), он будет распечатывать имя каждой группы с этим идентификатором. Возможно, он распечатал group 1group 2group 3.

$user_test = $this->mysqli->query("SELECT user_id,groups FROM user_test WHERE user_id = '1'"); 
while($user_test_fetch = $user_test->fetch_array()) { 
    $groups = $user_test_fetch["groups"]; 
} 

if(strlen($groups) > 1) { // user has more than 1 group 
    // ??? 
} else { // user does not have more than 1 group 
    $search = "id = '".$groups . "'"; 
} 

$group_data = $this->mysqli->query("SELECT * FROM test WHERE ".$search.""); 
while($group_data_fetch = $group_data->fetch_array()) { 
    echo $group_data_fetch["group_name"]; 
} 

Или, если у вас есть какой-либо другой способ, вы сделали бы это задание, пожалуйста, не стесняйтесь показать мне! Я просто пытаюсь научиться, как выполнять эту задачу (желательно, насколько это возможно).

+0

Можете ли вы изменить схему базы данных? Хранение нескольких значений в одном столбце почти всегда приводит к головным болям. – Chris

+0

@ Chris Нет, извините. Я хочу знать, как это сделать. –

+1

Нормализовать вашу схему. Спасите себе мир боли. – Strawberry

ответ

1

Довольно простой.
Если он хранится в формате 1,2,3. И при условии, один один называется 1 и идентификатор является INT или BIGINT (в противном случае этот запрос будет замедляться, если это VARCHAR)

Изменение

if(strlen($groups) > 1) { // user has more than 1 group 
// ??? 
} else { // user does not have more than 1 group 
$search = "id = '".$groups . "'"; 
} 

в

$search = "id IN (".$groups."); 

этот сингл строка будет работать с одной группой или набором групп, если она разделена запятой (поскольку SQL любит запятые)

+0

Вы узнаете что-то новое каждый день! Спасибо за ответ. Я думаю, что мои знания в SQL просто не были достаточно большими! Я отмечу это как правильный ответ за несколько минут :) –

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