SubSelect或SubQuery

时间:2013-11-11 04:45:53

标签: php mysql sql subquery

以下将成功找到客户提交的产品 * http://inks-etc.com/Canon/canon_inkdesign.php?ID=114 ID = 114来自$ _GET ['ID'],当进入SELECT接收产品时:价格,产品编号,描述,图像。现在我一直试图获得大约4个(LIMIT 4)更多类似的产品来捕获页面的左侧,所以如果客户选择LC41黑色,我也可以提供LC41青色,LC41洋红色,LC41黄色。我在想'SELECT Sub查询'会有所帮助。你能告诉我我必须修改什么,甚至再次开始执行这项任务。

    $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)){
?>

4 个答案:

答案 0 :(得分:0)

您不需要对此进行子查询,并且您需要使用通配符'%',以便您可以按模式进行搜索,因此$sql2应该如下所示:

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

我为%添加了匹配搜索。

答案 1 :(得分:0)

我相信你想要这样的东西:

SELECT Id, Product_Type, Product_No, miniImageFar
FROM Canon_INK
WHERE SUBSTR(Id, 0, 4) = SUBSTR($inksetc, 0, 4)

阅读LIKE运算符;它并没有说一个字符串就像另一个字符串,而是一个字符串匹配模式。

答案 2 :(得分:0)

$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)){

>

答案 3 :(得分:0)

我假设“LC41 Black”类型值存储在Product_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的事情,而是查看mysqli_real_escape_string