Php 查询以列出列中是否存在某个变量的行

Php 查询以列出列中是否存在某个变量的行,php,mysql,sql,Php,Mysql,Sql,如果列“id”的值为1、2、22等,但其值的形式为:1*2*37*34*5*214*3,则下面的查询工作正常。现在,如果在相应的列“id”中找到表单1、2、12等的$xo,那么该行应该存储在$row中。查询$q应该如何实现这一点 $q=mysqli_query($db,"select * from table1 where id='$x' order by cid DESC"); $row=mysqli_fetch_assoc($q); 跳转到更新4,为那些应该有相同问题的人提供解决方案 如果

如果列“id”的值为1、2、22等,但其值的形式为:1*2*37*34*5*214*3,则下面的查询工作正常。现在,如果在相应的列“id”中找到表单1、2、12等的$xo,那么该行应该存储在$row中。查询$q应该如何实现这一点

$q=mysqli_query($db,"select * from table1 where id='$x' order by cid DESC");
$row=mysqli_fetch_assoc($q);
跳转到更新4,为那些应该有相同问题的人提供解决方案

如果我理解你的问题是正确的。。。要检查$x是否是一个数字吗?然后用以下代码替换提供的代码:

if(!preg_match("@[^0-9]@i", $x))
{
    $q=mysqli_query($db,"select * from table1 where id='$x' order by cid DESC");
    $row=mysqli_fetch_assoc($q);
}
编辑:它的作用是。。。它检查$x变量的值是否包含任何其他字符,然后检查其中是否包含数字。如果它没有任何其他字符,如果它只有数字,那么将执行If语句中的代码

更新:

我第一次没听到你的问题。让我们再试一次:

select * from table1 where id = '$x' AND id NOT LIKE '%#%' order by cid DESC
更新2:

更新3:

如果id只是一个数字,则更新4:


你能改进一下你的问题吗?例如,我不确定1*2*37*34*5*214*3是什么意思。不确定这是否100%有效,但尝试使用like而不是=?在id行中有“%$x%”之类的东西?单元格将id存储为例如:1*2*37*34*5*214*3,其中可以有任意数量的散列,它们之间可以存储任意数量的id,以*@Sebastien分隔。你能详细说明一下吗?或者提供一些链接吗?如果你喜欢谷歌MySQL,它会告诉你它需要一个特定的名称字段中的字符。例如:从姓名为“%b%”的人员中选择姓名,这将返回所有带有“b”的姓名。不,不是这样。$x是一个int类型的php变量,用于存储id,我想列出那些列“id”的值与$x相等的行。如果我正确回答了问题,这将不起作用,因为id必须完全匹配$x,据我所知,只要id中存在$x,该行就必须返回?我想你没有得到它。给我机会再解释一遍。'id'列包含多个id,例如:1*2*37*34*5*214*3包含id:1,2,3,4,5,7,21。现在我必须检查该列是否包含$x指定的id。如果包含,然后将该行存储在$row@Bob0t是的,这就是我在问题评论中试图告诉OP的,它应该像塞巴斯蒂安已经发布的那样工作。我也更新了我的答案。。。但无论如何,在一个id列中添加多个id是一种糟糕的做法。。。您应该创建另一个表,然后使用外键连接这两个表。
select * from table1 where id LIKE '%$x%' order by cid DESC
select * from table1 
where 
id LIKE '$x*%' OR 
id LIKE '%*$x' OR 
id LIKE '%*$x*' OR 
id LIKE '%#$x#' OR 
id LIKE '%#$x*' OR 
id LIKE '%*$x#'  
order by cid DESC
select * from table1 
where 
id = '$x' OR 
id LIKE '$x*%' OR 
id LIKE '%*$x' OR 
id LIKE '%*$x*' OR 
id LIKE '%#$x#' OR 
id LIKE '%#$x*' OR 
id LIKE '%*$x#'  
order by cid DESC