我需要一点帮助。我需要从数据库中抓取所有包含它们登录ID的行。基本上,我在数据库中有一个名为“所有者”的列,其中有几个it。让我们说"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占用数据库中单独列中的大量空间。
发布于 2014-01-21 17:39:08
你可以试试这个:
SELECT * FROM table_name WHERE FIND_IN_SET(?, Owners);其中?必须替换为用户id,例如
SELECT * FROM table_name WHERE FIND_IN_SET(6, Owners);正如其他人所指出的,您可能还想阅读有关数据库规范化的内容,下面是FIND_IN_SET的文档
发布于 2014-01-21 17:36:02
这可能是你想要的吗?
SELECT * FROM table_name WHERE Owners LIKE '%6%';?
编辑:这样做会吸引其他业主,比如68,600,6123。您应该研究数据库规范化。
EDIT2:
请想想看,因为您的逗号之间没有空格,所以可以使用of ();函数如下:
$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
}
}发布于 2014-01-21 17:40:47
实现这一点的一种更简洁的方法是为所有者关系使用一个单独的表。
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}https://stackoverflow.com/questions/21265177
复制相似问题