В настоящее время у меня есть системный набор, который отображает продукты из базы данных на основе того, какие фильтры установлены на панели управления.Looping пользовательские фильтры для вытаскивания продуктов MYSQL
Это петли, как это:
1. Begin loop
2. Pick Filter
3. Search product database for product matching the filter AND search term
4. Return a table row of products matching these terms
5. End Loop
Это отлично работает в течение времени нагрузки, за исключением. Поскольку он должен прокручивать все продукты для каждого фильтра с поисковым термином, время, затрачиваемое только, увеличивается с каждым фильтром, добавленным на заднем конце.
Мой вопрос: есть ли меньший способ писать в каком-либо массиве фильтров в один оператор mysql? как это:
SELECT FROM products Where A line matches one of the array of filters AND search term?
Другая причина мне нужно это потому, что в настоящее время это втягивание подагра повторяющиеся строки продукта. В то время как я нагло скрыл двойники с javascript, не совсем хорошо держать его таким образом.
В настоящее время используется этот код. Если кто-то может предложить какие-либо предложения относительно того, как лучший способ сделать это, я все уши.
//connect and fetch all entries from the filter table
$filterproducts = $dbh->prepare("SELECT * FROM table_filter_selection ORDER BY filter ASC");
$filterproducts->execute();
$filterselect = $filterproducts->fetchAll();
//for each entry found loop through a second loop
foreach($filterselect as $rows){
$wildcard = "%" . $rows['filter'] . "%";
//make a variable into a regex of the row
$query = "PRODUCT_NAME LIKE '%" . implode("%' AND PRODUCT_NAME LIKE '%", $breakdown) . "%'";
$sqlstring= "SELECT * FROM product_list WHERE PRODUCT_NAME LIKE :filterfind AND " . $query;
$searchproducts = $dbh->prepare($sqlstring);
$searchproducts->bindParam(":filterfind", $wildcard, PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$searchproducts->execute();
//search for all products that match the wildcard AND the current filter
foreach($searchproducts as $rows2){
//for every one found, make a row.
echo "<tr><td>" . $rows2['SKU'] ." <strong style='font-style: italic;'>". $rows2['COMMENTS'] . "</strong><td/><td>". $rows2['PRODUCT_NAME'] ."</td><td>". $rows2['QTY'] . "</td></tr>";
}
}
Я включил очень быстрый макет кода, который я использую.
Ну, вы можете начать с того, чтобы показать нам, как выглядит ваш код. Трудно сказать, что есть лучший способ сделать что-то, иначе. –
Вы можете попробовать «где в»: выберите * из таблицы, где id в (1,2,3,4); – rescobar
Я добавил код, как было задано. У меня не было времени раньше, так как я был в спешке. Для этого @MagnusEriksson –