В настоящее время я работаю с настройкой MyBB, где я пытаюсь выполнить SQL-запрос, который может проверить, является ли пользователь частью некоторой дополнительной группы. Однако у меня возникают трудности.
MyBB хранит дополнительные идентификаторы групп в одном поле VARCHAR, разделенные запятыми, например, 1,23,27,30,49 и т.д. Я знаю, что в PHP я могу взорвать строки, используя запятую в качестве разделителя. Я понимаю, что MySQL не может взорваться, но я могу использовать substring_index для достижения аналогичной цели. Обратите внимание, что каждый пользователь может иметь случайный список дополнительных групп, поэтому не все пользователи будут одинаковыми.
Я пытаюсь это
$stmt = $conn->query('SELECT username, additionalgroups FROM my_users WHERE SUBSTRING_INDEX(30, ',', 1)');
foreach ($stmt as $row)
{
print '<div class="name"><a href="#">' . $row['username'] . '</a></div>';
}
Однако это не работает. Глядя на https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_substring-index, я, кажется, следую их пути построения условия, но я получаю следующую ошибку:
Fatal error: Uncaught PDOException: SQLSTATE [HY000]: общая ошибка: режим должен быть целым числом в E:\xampp\htdocs\11thinfantrybrigade.co.uk\orbat.php: 180 Трассировка стека: # 0 E:\xampp\htdocs\11thinfantrybrigade.co.uk\orbat.php(180): PDO-> query ('SELECT username...', ', 1)') # 1 {main} выбрано в E:\xampp\htdocs\11thinfantrybrigade.co.uk\orbat.php в строке 180
Любой совет, пожалуйста?
Конечной целью является печать списка пользователей, соответствующих этим критериям.
Спасибо.
$query = 'SELECT username FROM my_users WHERE CONCAT(",",additionalgroups,",") LIKE "%,30,%"' ;
$stmt = $conn->query($query);
foreach ($stmt as $row)
{
print '<div class="name"><a href="#">' . $row['username'] . '</a></div>';
}
$stmt = $conn->query('SELECT username, additionalgroups FROM my_users WHERE SUBSTRING_INDEX(\'30\', \',\', 1)');
Предпочтительно она должна быть такой, как ,
вне кавычек, может возникнуть проблема с PHP.
SELECT username FROM my_users WHERE CONCAT(',',additionalgroups,',') LIKE "%,30,%"