1

下面将成功找到客户已提交的产品 * http://inks-etc.com/Canon/canon_inkdesign.php?ID=114 ID=114 来自 $_GET['ID'] 并进入 SELECT 时收到产品:价格、产品编号、描述、图片。现在我一直在尝试获取大约 4 (LIMIT 4) 个更多类似的产品来捕获页面左侧,所以如果客户选择 LC41 Black,我也可以提供 LC41 Cyan、LC41 Magenta、LC41 Yellow。我认为“选择子查询”会有所帮助。你能告诉我我必须修改什么,甚至重新开始执行这项任务吗?

    $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

4 回答 4

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

?>

于 2013-11-11T07:50:18.783 回答
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

于 2013-11-11T12:50:49.073 回答
0

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

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

我添加了%用于匹配搜索。

于 2013-11-11T04:54:14.917 回答
0

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

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

阅读LIKE操作员;它并不是说一个字符串与另一个字符串相似,而是说一个字符串匹配一个模式。

于 2013-11-11T04:56:08.103 回答