Создание MySQL-запроса с MyBB для взрыва поля, хранящего строку

0

В настоящее время я работаю с настройкой 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

Любой совет, пожалуйста?

Конечной целью является печать списка пользователей, соответствующих этим критериям.

Спасибо.

  • 0
    SUBSTRING_INDEX первый аргумент должен быть строкой, у вас есть «30». Вы не предоставляете поле для функции, очень странно? Также: не ясно, что вы хотите сделать: найти всех пользователей в группе 30? Если это то, что вам нужно, это намного проще: SELECT username FROM my_users WHERE CONCAT(',',additionalgroups,',') LIKE "%,30,%"
  • 0
    Привет, Ремер, спасибо. Я думал, что как поле дополнительных групп varchar, 30 будет классифицироваться как строка. Разве это не так? Когда вы говорите, что я не предоставил поле функции, вы имеете в виду, что я должен добавить что-то вроде my_users.additionalgroups в запрос? Я полностью посмотрел тот факт, что я не предоставил поле - спасибо.
Показать ещё 3 комментария
Теги:
substring
mybb

2 ответа

0
Лучший ответ
$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>';
}
  • 0
    Надеюсь это поможет.
  • 0
    Привет, Ремер! Я избежал кавычек, как показывал NewBee, но все равно получил ошибку. Я не думал просто менять тип кавычек. Теперь это работает. Спасибо за помощь и смирение с моей усталой новизной!
Показать ещё 1 комментарий
0
$stmt = $conn->query('SELECT username, additionalgroups FROM my_users WHERE SUBSTRING_INDEX(\'30\', \',\', 1)');

Предпочтительно она должна быть такой, как , вне кавычек, может возникнуть проблема с PHP.

  • 0
    Спасибо. Это исправляет ошибку и отображает вывод, однако теперь он отображает всех пользователей. Я полагаю, это может быть связано с тем, что @Roemer сказал о том, что не предоставил поле.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню