Я использую следующий код для создания функции поиска для своего сайта с использованием PHP/MYSQL.PHP: не показывать один и тот же продукт дважды?
Этот код будет искать размеры и цвета, если флажки выделены и отобразятся на моей странице.
пример:
checkbox 1 = small
checkbox 2 = large
checkbox 3 = xxlarge
checkbox 4 = red
checkbox 5 = black
etc etc ......
если пользователи выбирают small and large as the size and red as the color
, мой PHP будет возвращать продукты, которые имеют те полномочия.
Это PHP код:
<?php
error_reporting(-1);
ini_set('display_errors', 'On');
include "config/connect.php";
$searchList = "";
$clause = " WHERE ";//Initial clause
$sql="SELECT *
FROM `yt`
INNER JOIN `ATTRIBUTES` ON yt.id=ATTRIBUTES.id";//Query stub
if(isset($_POST['submit'])){
if(isset($_POST['keyword'])){
foreach($_POST['keyword'] as $c){
if(!empty($c)){
##NOPE##$sql .= $clause."`".$c."` LIKE '%{$c}%'";
$sql .= $clause . " (ATTRIBUTES.sizes LIKE BINARY '$c' OR ATTRIBUTES.colors LIKE BINARY '$c')";
$clause = " OR ";//Change to OR after 1st WHERE
}
}
//print "SQL Query: $sql<br />"; //<-- Debug SQl syntax.
// Run query outside of foreach loop so it only runs one time.
$query = mysqli_query($db_conx, $sql);
//var_dump($query); //<-- Debug query results.
// Check that the query ran fine.
if (!$query) {
print "ERROR: " . mysqli_error($db_conx);
} else {
// Use $query inside this section to make sure $query exists.
$productCount = mysqli_num_rows($query);
$i=0; // count the output amount
if ($productCount > 0) {
while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)){
$id = $row["id"];
$product_name = $row["product_name"];
$searchList .= ''.$product_name.'';
}
}
}
}
}
?>
ВОПРОС, ЧТО Я ИМЕЮ:
, если продукт имеет малый и большой (оба) в качестве учетных данных и пользователей поиска маленький и большой, мой PHP вернет тот же элемент дважды.
Как я могу остановить php, возвращая тот же продукт дважды в случаях, как указано выше?
любой совет будет оценен.
Я использовал GROUP BY, как предложено следующим образом:
$sql="SELECT *
FROM `yt` GROUP BY yt.id
INNER JOIN `ATTRIBUTES` ON yt.id=ATTRIBUTES.id"
но выдает следующее сообщение об ошибке:
ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INNER JOIN `ATTRIBUTES` ON yt.id=ATTRIBUTES.id WHERE (ATTRIBUTES.sizes LIKE BIN' at line 3
Попробуйте 'SELECT DISTINCT * ....' http://www.mysqltutorial.org/mysql-distinct.aspx –
@ ʰᵈˑ, нет, это не работает. он по-прежнему возвращает дублированные элементы. потому что таблица элементов отделена от таблицы цветов и размеров. извините, я должен был упомянуть об этом в моем вопросе. – TERO