2

私はPDOにかなり慣れていませんが、おそらく簡単な答えがある何かに出くわしました。

カテゴリ番号の配列があり、一致するカテゴリ番号を持つすべてのアイテムを見つけるためにmysqlデータベースを検索する必要があります。

別のクエリからカテゴリ配列を受け取っているので、DBに正しく接続していることがわかります。

$category = Array ( [0] => 3259 [1] => 3617 [2] => 3257 [3] => 3258 [4] => 3450 [5] => 3452 [6] => 3478 [7] => 3479 [8] => 3480 [9] => 3448 [10] => 3449 [11] => 3451 [12] => 3456 [13] => 3454 [14] => 3455 [15] => 3459 [16] => 3460 [17] => 3458 [18] => 3453 [19] => 3461 [20] => 3462 [21] => 3457 [22] => 3463 [23] => 3447 ) 

次に、アイテムデータベースを調べて、一致するカテゴリを確認する必要があります。各アイテムには複数のカテゴリを含めることができ、各カテゴリには4桁の数字があります。複数のカテゴリはa=で区切られます

$categoryResults = $conn->prepare('SELECT * FROM items WHERE category like :cats ORDER BY promotions,price ASC');
$categoryResults->execute(array(':cats' => '%'.$category.'%'));
$categoryNumber = $categoryResults->rowCount();

これは私が間違っているように見えるところです。mysqlリクエストを使用すると、配列を介したループを使用して手動でビルドし、長いSQLクエリを取得できます。

'Select * From items WHERE category like '%3259%' OR WHERE category LIKE '%3617%'........etc

しかし、これがPDOを使用する利点の1つであると確信しています。それに追加するだけで、結果が一意である必要があります。アイテム97がカテゴリ3259およびカテゴリ3617にある場合、結果を1回だけ取得したいと思います。

前もって感謝します。

4

2 に答える 2

0

私はあなたが声明のある数字を探しているのは間違いだと思いますLIKEcategoryカテゴリのIDだけではありませんか、それともどのように保存されますか?CSVリストの場合categoryは、多対多の接続に個別のテーブルを使用するように変更することをお勧めします。

すでに数値の場合は、次のINステートメントを使用してください

$categoryResults = $conn->prepare('SELECT * FROM items WHERE category IN (:cats) ORDER BY promotions,price ASC');
$categoryResults->execute(array(':cats' => implode(',', $category));
$categoryNumber = $categoryResults->rowCount();

更新またはさらに良いことに、同じであるこの質問をチェックしてください。

配列をIN()条件にバインドできますか?

于 2013-01-02T11:09:20.777 に答える
-2

このようにしてください

<?php
$categoryId = array(1, 21, 63, 171);
$place_holders = implode(',', categoryId);


$sth = $dbh->prepare("SELECT * FROM items WHERE category in (?) ORDER BY 
                      promotions,price ASC");
$sth->bindParam(1, $place_holders, PDO::PARAM_STR, 12);
$sth->execute($params);

?>
于 2013-01-02T11:11:01.663 に答える