如何在php中搜索从Database中存储为数组的值

时间:2014-11-10 13:57:35

标签: php

如何使用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'']."%' ");

我确定我的查询不会让我得到我想要的结果,如果有任何其他解决方案,请你帮我解决这个问题。

3 个答案:

答案 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个查询中完成,但这是我能想到的全部。