1

以下は、顧客が送信した製品を正常に見つけることができます * http://inks-etc.com/Canon/canon_inkdesign.php?ID=114商品を受け取ります: 価格、商品番号、説明、画像。現在、ページの左側をキャプチャするために、約 4 (LIMIT 4) 個の同様の製品を入手しようとしています。そのため、顧客が LC41 ブラックを選択した場合、LC41 シアン、LC41 マゼンタ、LC41 イエローも提供できます。「SELECT サブクエリ」が役立つと思います。このタスクを実行するために何を変更し、最初からやり直す必要があるか教えてください。

    $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

これにはサブクエリは必要ありません'%'。パターンで検索できるようにワイルドカードが必要なため、次$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

「LC41 Black」タイプの値は、Id 列ではなく Product_No 列に格納されていると想定しています。また、元の製品が類似製品のリストに表示されないようにすることも想定しています。

したがって、サブクエリを使用するのではなく、テーブルをそれ自体と結合して結果を取得できます。

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

私はあなたがこのようなものが欲しいと信じています:

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 に答える