Как я могу сравнить одно значение с несколькими значениями в базе данных в php?

#php #sql

#php #sql

Вопрос:

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

        id      hobbies
    -------- -------------
       1      1,2
       2       2 
       3      2,3
  

таблица хобби:

           id      hobbies
    -------- -------------
       1        singing
       2        dancing 
       3        reading
  

теперь моя проблема в том, что я хочу, чтобы все пользователи, хобби которых — танцы, имели идентификатор 2 из таблицы хобби. но мой запрос дает пользователю только 3 в качестве вывода, что неверно, вот мой php-код:

     $scheck = $_REQUEST['scheck'];//$scheck is array of hobbies like 1,2
    if (!empty($scheck)) {
            if (strstr($scheck, ',')) {
                $data3 = explode(',', $scheck);
                $sarray = array();
                foreach ($data3 as $c) {
                    $sarray[] = "t1.hobbies = $c";
                }
                $WHERE[] = '(' . implode(' OR ', $sarray) . ')';
                $inner = ' JOIN hobbies AS t3 ON t1.hobbies = t3.id ';
            } else {
                $WHERE[] = '(t1.hobbies = ' . $scheck . ')';
                $inner = ' JOIN hobbies AS t3 ON t1.hobbies = t3.id ';
            }
        }
      $w = implode(' AND ', $WHERE);
      if (!empty($w)) $w = 'WHERE ' . $w;
     $query = mysql_query("SELECT DISTINCT  t1 . * FROM  `users` AS t1 $inner $w
  

пожалуйста, дайте мне несколько решений моей проблемы.

Комментарии:

1. Неправильный дизайн таблицы. Вы должны вставлять данные по строкам.

2. Да, у вас действительно должна быть одна строка, содержащая идентификатор пользователя и идентификатор хобби. Итак, для пользователя с 3 хобби у вас будет 3 строки. Это также упростило бы удаление хобби у пользователя.

3. Вы не можете объединить ON t1.hobbies = t3.id , поскольку t1 содержит несколько значений, где as t3 содержит его как целое число.

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

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

Ответ №1:

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

Моим предложением будет создать новую таблицу для пользователей и отношения «Хобби», где добавить несколько записей пользователей для каждого хобби.

Спасибо

Комментарии:

1. тип данных пользовательской таблицы для столбцов хобби — varchar(255)