我需要一些帮助。我需要从数据库中获取包含其登录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|
---|--------|-----------|------|
换句话说:
我想要这个的原因是我不希望ownerid2
,ownerid3
,ownerid4
在数据库的不同列中占用大量空间。
答案 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}