-1

私はproductsというMySQLテーブルを持っており、このテーブルにはデータがあります。

id | category | product1 | price1 | discount1 | product2 | price2 | discount2 | product3 | price3 |discount3 |
----------------------------------------------------------------------------------------------------------
| 1 | Meat    | Pork 1kg | 3.99   | -30%    | Lamb 1kg    | 5.94 | -25%      | Ham 200g    | 1.99 | -10% |
| 2 | Fruit   | Apple 1kg| 1.25   | -32%    | Banana 1 kg | 0.99 | -15%      | Melon 1 kg  | 0.79 | -12% |

私が持っているPHP検索スクリプトは次のようになります。

//-query the database table
$sql="SELECT id, category, product1, price1, discount1, 
product2, price2, discount2, product3, price3, discount3 
FROM products 
WHERE 
product1 LIKE '%" . $name . "%' OR 
price1 LIKE '%" . $name ."%' OR 
discount1 LIKE '%" . $name ."%' OR 
product2 LIKE '%" . $name ."%' OR 
price2 LIKE '%" . $name ."%' OR 
discount2 LIKE '%" . $name ."%' OR 
product3 LIKE '%" . $name ."%' OR 
price3 LIKE '%" . $name ."%' OR 
discount3 LIKE '%" . $name ."%'";

//-run the query against the mysql query function
$result=mysql_query($sql);

//-create while loop and loop through result set
while($row=mysql_fetch_array($result)){

$id=$row['id'];
$category =$row['category'];
$product1=$row['product1'];
$price1=$row['price1'];
$discount1=$row['discount1'];
$product2=$row['product2'];
$price2=$row['price2'];
$discount2=$row['discount2'];
$product3=$row['product3'];
$price3=$row['price3'];
$discount3=$row['discount3'];

//-display the result of the array

echo "<ul>\n"; 
echo  "<li>" . $id . "</li>\n"; 
echo "<li>" . $category . "</li>\n";
echo "<li>" . $product1 . "</li>\n"; 
echo "<li>" . $price1 . "</li>\n";
echo "<li>" . $discount1 . "</li>\n";
echo "<li>" . $product2 . "</li>\n";
echo "<li>" . $price2 . "</li>\n";
echo "<li>" . $discount2 . "</li>\n";
echo "<li>" . $product3 . "</li>\n";
echo "<li>" . $price3 . "</li>\n";
echo "<li>" . $discount3 . "</li>\n";
echo "</ul>";
}  

問題は、たとえばAppleを検索すると、バナナとメロンも表示されることです。

どうすればAppleだけを表示することができ、キーワードappleで検索した場合の価格と割引が表示されます。

4

4 に答える 4

4

あなたのDB構造は非常に奇妙であり、それはあなたにこの頭痛の種を与えています。代わりに、通常の関係を使用してください。

テーブルカテゴリ

id  name
1   Meat
2   Fruit

テーブル製品

id  category_id  product      price  discount
1   1            Pork 1kg     3.99   -30%
2   1            Lamb 1kg     5.94   -25%
3   1            Ham 200g     1.99   -10%
4   2            Apple 1kg    1.25   -32%
5   2            Banana 1 kg  0.99   -15%
6   2            Melon 1 kg   0.79   -12%

このクエリを使用して製品(例:「豚肉」)を見つけることができます

SELECT product.*, category.name as category FROM product INNER JOIN category ON product.category_id = category.id WHERE product.name LIKE 'pork%'
于 2013-01-29T08:57:50.140 に答える
0

実際に使用できるコードを作成するためのヒントを次に示します。

  • 使用を停止しmysql(非推奨)、およびの使用を開始しmysqliますPDO
  • 適切なデータベースを作成します。あなたの状況では少なくとも2つのテーブルが必要です-categoriesそしてproducts
  • いくつかのSQLチュートリアルを調べてください。これが1つです(使用方法を知っている必要がありますJOIN
于 2013-01-29T08:57:08.953 に答える
0

私が正しく理解している場合:あなたは3つの製品を含むテーブル列を持っているので、各行にも3つの製品があります。したがって、不要なproduct2とproduct3(およびそれらの価格など)を削除して、必要な1つの製品のみを呼び出します。

于 2013-01-29T08:57:15.573 に答える
0

これは、これらの製品が1行になっているため、別の行として追加するためです。

于 2013-01-29T08:58:06.170 に答える