@Joker2705

Как выбрать данные из таблицы по похожим данным их массива?

Здравствуйте. Суть вот в чем. Есть массив
$arr={1, 2, 3, 4, 5}
Есть БД на MySQL, выглядит примерно так:
id|name|dat
1 |user1|1
2 |user2|1 6
3 |user3|2 3
4 |user4|5 10
5 |user5|10 12
6 |user6|5
и т.д.

Делаю запрос
$arr_lists = '\'' . implode ( "','",  $arr ) . '\'';
$req = mysqli_query($db, "SELECT * FROM `table` WHERE `dat` IN(". $arr_lists . ") ");


И у меня выводятся данные только из id 1 и 5.
Подскажите, как мне сделать запрос так, что бы он искал похожие данные, типа как работает команда LIKE, что бы мне выводились id 1, 2, 3, 4, 6
  • Вопрос задан
  • 111 просмотров
Решения вопроса 1
Mx21
@Mx21
>типа как работает команда LIKE

Если, никак не обойтись без LIKE, то составляй запрос с кол-вом LIKE в зависимости от кол-ва элементов массива. Но, работать такая выборка будет ужасно долго.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
kimono
@kimono
PHP/Yii2 разработчик
SELECT * FROM `table` WHERE `dat` REGEXP '[12345]'
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Приведите базу в нормальную форму, выделите поле `dat` в отдельную таблицу `user_dats` (`user_id`, `dat`), где в каждой строке будет содержаться только одно значение из `dat` и пара (`user_id`, `dat`) образует первичный ключ.
Затем используйте запрос
SELECT * 
  FROM (
    SELECT `user_id`
      FROM `user_dats`
      WHERE `dat` IN (1, 2, 3, 4, 5)
      GROUP BY `user_id`
  ) AS `uid`
  JOIN `table` ON `uid`.`user_id` = `table`.`id`
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы