如何使用GET方法搜索数组值以从数据库中检索数据?
换句话说,我有(prof_ids)
存储在数据库中,如下所示:1,15,52,所有这三个值都存储在一个字段中。我有一个包含此(?prof_id=1)
的链接,我想要一个查询来搜索(prof_id)
字段是否存在(prof_ids)
字段。而且我不知道该怎么做。
这可能吗?
$sql = $mysqli->query("SELECT * FROM profs WHERE prof_ids LIKE '%".$_GET[prof_id'']."%' ");
我确定我的查询不会让我得到我想要的结果,如果有任何其他解决方案,请你帮我解决这个问题。
答案 0 :(得分:1)
使用LIKE
(除SQL injection之外)执行该操作的问题在于,您将获得可能不需要的各种记录。考虑我们是否通过1
。这将匹配1,10,14,100,21等
这就是为什么您需要一个包含单个记录中数据的一对多表,以便您可以准确匹配记录。它需要更多空间,但它是确保每次都能获得所需记录的唯一方法。
SELECT table1.column
FROM table1
INNER JOIN table2 ON table1.id = table2.id
WHERE table2.record = "1"
答案 1 :(得分:1)
您可以尝试RLIKE而不是LIKE 所以你的情况看起来像
"SELECT * FROM profs WHERE prof_ids REGEXP '[[:<:]]".$_GET['prof_id']."[[:>:]]' "
答案 2 :(得分:0)
因为你在列中放了3个ID,所以很难进行普通匹配。
但是如果模式总是像(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个查询中完成,但这是我能想到的全部。