Php 子选择或子查询

Php 子选择或子查询,php,mysql,sql,subquery,Php,Mysql,Sql,Subquery,下面将成功找到客户提交的产品 *ID=114来自$_GET['ID'],当进入选择接收产品时:价格、产品编号、描述、图像。现在,我一直在尝试获取更多类似的产品,以捕获页面左侧,因此如果客户选择LC41黑色,我也可以提供LC41青色、LC41品红、LC41黄色。我认为“选择子查询”会有所帮助。你能告诉我我必须修改什么,甚至重新开始执行这项任务吗 $inksetc = htmlentities($_GET['ID']); $sql2 = "SELECT Id, Product

下面将成功找到客户提交的产品 *ID=114来自$_GET['ID'],当进入选择接收产品时:价格、产品编号、描述、图像。现在,我一直在尝试获取更多类似的产品,以捕获页面左侧,因此如果客户选择LC41黑色,我也可以提供LC41青色、LC41品红、LC41黄色。我认为“选择子查询”会有所帮助。你能告诉我我必须修改什么,甚至重新开始执行这项任务吗

    $inksetc = htmlentities($_GET['ID']);

     $sql2 = "SELECT Id,   Product_Type,  Product_No ,  miniImageFarm

         FROM `Canon_INK`

         WHERE IN
             (SELECT Id= $inksetc FROM Canon_INK WHERE Id LIKE $inksetc) 

         LIMIT 4";

$result = mysqli_query($dbc,$sql2) or die(mysqli_error($dbc));

    while($rows = mysqli_fetch_array($result)){
?>

您不需要对此进行子查询,您需要通配符
'%'
,这样您就可以按模式进行搜索,
$sql2
应该如下所示:

$sql2 = "SELECT Id,   Product_Type,  Product_No ,  miniImageFarm ";
$sql2 .= "FROM `Canon_INK` ";
$sql2 .= "WHERE Id LIKE '%".SUBSTR($inksetc,0,4)."%'";

我为匹配搜索添加了
%

我相信您需要这样的内容:

SELECT Id, Product_Type, Product_No, miniImageFar
FROM Canon_INK
WHERE SUBSTR(Id, 0, 4) = SUBSTR($inksetc, 0, 4)
向上阅读
LIKE
操作符;它并不是说一个字符串像另一个字符串,而是说一个字符串匹配一个模式

$inksetc = htmlentities($_GET['ID']);// need to store LC41 in $_GET['ID'].

  $sql2 = "SELECT Id,   Product_Type,  Product_No ,  miniImageFarm

     FROM `Canon_INK`

     WHERE Id IN
         (SELECT Id FROM Canon_INK WHERE Id LIKE '%".$inksetc."%') // use Id instead of Id= $inksetc.

     LIMIT 4";

$result = mysqli_query($dbc,$sql2) or die(mysqli_error($dbc));

 while($rows = mysqli_fetch_array($result)){
?>

我假设“LC41 Black”类型值存储在Product\u No列中,而不是Id列中。我还假设您不希望原始产品出现在类似产品列表中

因此,您可以将表与其自身联接以获得结果,而不是使用子查询:

SELECT  c.Id,  c.Product_Type,  c.Product_No,  c.miniImageFarm
FROM Canon_INK AS c
INNER JOIN 
    Canon_INK AS OriginalProduct
ON 
    SUBSTR(c.Product_No, 0, 4) = SUBSTR(OriginalProduct.Product_No, 0, 4)
AND
    c.Id != OriginalProduct.Id
WHERE
    OriginalProduct.Id = $intsect
LIMIT 4;

您的查询目前不安全-请不要使用htmlentities函数逃避SQL,而是查看一下。

您使用的是哪种RDBMS?可能是mysql,因为他在php中使用
mysqli()
函数。我使用的是phpMyAdmin不是DBMS,这是一个用于DBMS的前端/管理工具,名为MySQL,它的SQL语法无效。感谢Edper提供的LIKE/Substring。FireFox很难接受:SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解在“%”附近使用的正确语法。SUBSTR(5,0,4)。“%”如果您想查看,请单击此处:感谢Edper提供的所有帮助:)谢谢David,我有这个url与您共享:因为它给我提供了一个我不理解的错误:“字段列表”中的未知列“c.Id”任何建议。哦我可以确认你对上面所有的公告都是正确的。非常好!Jason Kraft inks-etc.com P.S.我将$intsect更改为$Inkstec(我的公司名称),你让我听起来好像我的公司是一个昆虫LOL!没问题。查看您的错误-我认为您可能复制了错误的SQL?确保在“来自佳能油墨”之后包含“AS c”位。像这样
$sql2=“从Canon_INK中选择c.Id、c.Product_类型、c.Product_编号、c.miniImageFarm作为c内部连接Canon_INK作为SUBSTR上的OriginalProduct(c.Product_编号,0,4)=SUBSTR(OriginalProduct.Product_编号,0,4)和c.Id!=OriginalProduct.Id,其中OriginalProduct.Id=$inksetc LIMIT 4;”您是否尝试使用我在评论中包含的更新SQL?