PHP - 从数据库中获取信息(复杂)

时间:2014-01-21 17:32:53

标签: php mysql

我需要一些帮助。我需要从数据库中获取包含其登录ID的所有行。基本上,我在数据库中有一个名为“所有者”的列,其中有一些ID。让我们说“1,6,8”,如果用户ID 6登录,我需要抓住那一行。如果它不包含6,说“2,5,7”则不要抓住它。我的措辞可能不太好。

--------------------------------
ID |Name    |Other Info |Owners|
---|--------|-----------|------|
1  |Testing |Testing 123|1,4,6 |
---|--------|-----------|------|
2  |Testing1|Catz       |5,7,8 |
---|--------|=-----------------|
3  |Testing2|Woof       |6,9,10|
---|--------|-----------|------|

换句话说:

  • 用户ID 6登录。
  • 转到需要抓取行的页面。
  • 脚本抓取第1行和第3行(因为所有者列表包含6个)。
  • PHP foreach,在表格中显示resutls。 (不需要帮助 这一点)。

我想要这个的原因是我不希望ownerid2ownerid3ownerid4在数据库的不同列中占用大量空间。

3 个答案:

答案 0 :(得分:3)

你可以试试这个:

SELECT * FROM table_name WHERE FIND_IN_SET(?, Owners);

其中?必须替换为用户ID,例如

SELECT * FROM table_name WHERE FIND_IN_SET(6, Owners);

正如其他人指出的那样,您可能还想阅读database normalization,这里是FIND_IN_SET的文档

答案 1 :(得分:0)

这可能是你想要的吗?

SELECT * FROM table_name WHERE Owners LIKE '%6%';

????

编辑:这样做会吸引其他所有者,例如68,600,6123。你应该研究数据库规范化。

EDIT2:

想到这一点,因为你的逗号之间没有空格你可以使用explode();功能如下:

$ownerid = //WHATEVER THE OWNERS ID IS
$sql = "SELECT * FROM table_name WHERE Owners LIKE '%$ownerid%'";
$result = mysqli_query($con, $sql);
while($data = mysqli_fetch_array($result)){
    $owners = $data['Owners'];
    $owners = explode(',',$data);
    if(in_array($ownerid, $owners){
        //SHOW ROW DATA HERE
    }
}

答案 2 :(得分:0)

更简洁的方法是为所有者关系使用单独的表格。

Table = Owner, has ID.
Table = Test, what you are currently trying to get
Table = OwnerTestRel, has a foreign key to Owner and one to Test.

然后您的查询可能会变成

Select test.* 
FROM test
JOIN OwnerTestRel ON test.id=OwnerTestRel.testId
WHERE OwnerTestRel.ownerId = {owner's Id}