#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)