Как найти значение, хранящееся в массиве из базы данных в php

0

Как искать значение массива с помощью метода GET для извлечения данных из базы данных?

Другими словами, у меня есть (prof_ids) Хранится в базе данных следующим образом: 1, 15, 52, Все эти три значения хранятся в одном поле. У меня есть ссылка, содержащая это (?prof_id=1) например, и я хочу, чтобы запрос (prof_id) поиск, если значение (prof_id) существует в поле (prof_ids) или нет. и у меня нет идеи, как это сделать.

Возможно ли это?

$sql = $mysqli->query("SELECT * FROM profs WHERE prof_ids LIKE '%".$_GET[prof_id'']."%' ");

Я уверен, что мой запрос не даст мне результат, который я ищу, если у кого-нибудь есть другие решения, можете ли вы помочь мне в этом.

Теги:

3 ответа

1
Лучший ответ

Проблема с этим использованием LIKE (кроме SQL-инъекции) заключается в том, что вы получите всевозможные записи, которые вы, возможно, не захотите. Рассмотрим, если мы пройдем 1 дюйм. Это будет соответствовать 1, 10, 14, 100, 21 и т.д.

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

 SELECT table1.column
 FROM table1
      INNER JOIN table2 ON table1.id = table2.id
 WHERE table2.record = "1"
0

Поскольку вы помещаете 3 идентификатора в столбец, трудно выполнить обычное сопоставление.

Но если шаблон всегда похож на (int, int, int), вы можете использовать REGEXP как:

$param = $_GET['prof_id'];

//getting the records where the id in first position
$sql = $mysqli->query("SELECT * FROM profs WHERE prof_ids REGEXP param .',[0-9]*,[0-9]*'");

//getting the records where the id in second position
$sql2 = $mysqli->query("SELECT * FROM profs WHERE prof_ids REGEXP '[0-9]*,'.param .',[0-9]*'");

//getting the records where the id in third position
$sql3 = $mysqli->query("SELECT * FROM profs WHERE prof_ids REGEXP ',[0-9]*,[0-9]*'.param");

Я думаю, что это могло быть сделано в 1 запросе, но это все, о чем я могу думать.

0

Вы можете попробовать RLIKE вместо LIKE. Таким образом, ваше состояние будет выглядеть примерно так:

"SELECT * FROM profs WHERE prof_ids REGEXP '[[:<:]]".$_GET['prof_id']."[[:>:]]' " 

Ещё вопросы

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