Отображение данных столбцов в поиске PHP

У меня есть таблица 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 "
    \n"; echo "
  • " . $id . "
  • \n"; echo "
  • " . $category . "
  • \n"; echo "
  • " . $product1 . "
  • \n"; echo "
  • " . $price1 . "
  • \n"; echo "
  • " . $discount1 . "
  • \n"; echo "
  • " . $product2 . "
  • \n"; echo "
  • " . $price2 . "
  • \n"; echo "
  • " . $discount2 . "
  • \n"; echo "
  • " . $product3 . "
  • \n"; echo "
  • " . $price3 . "
  • \n"; echo "
  • " . $discount3 . "
  • \n"; echo "
";
}  

Проблема в том, что когда я ищу, скажем, Apple, Banana и Melon также отображаются.

Как я могу заставить его показывать только Apple, и это цена и скидка при поиске с ключевым словом apple.

1
nl ja de
Почему у вас есть 3 продукта в одной строке?
добавлено автор Vlad Preda, источник
Изменение структуры будет проще, чем пытаться обойти его. Короче, но тем более, в конечном счете.
добавлено автор Jasny - Arnold Daniels, источник
Для этого нет оснований. Это было так, когда я начал работать над этим. Есть ли способ заставить поиск работать с этой структурой?
добавлено автор Art, источник

4 ответы

Ваша структура БД очень странная, что дает вам эту головную боль. Вместо этого используйте нормальные отношения.

Категории таблиц

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%'
4
добавлено
Спасибо, что освободил меня.
добавлено автор Art, источник

Если я правильно понимаю: у вас есть столбцы таблицы с тремя продуктами, поэтому в каждой строке также будут три продукта. Поэтому удалите бесполезный продукт2 и продукт3 (и их цену и т. Д.) И вызовите только один продукт, который вы хотите

0
добавлено

Вот несколько советов по созданию кода, который фактически можно использовать:

  • Stop using mysql (it is deprecated) and start using mysqli and PDO.
  • Create a proper database. You need at least 2 tables in your situation - categories and products
  • Look up some SQL tutorials. Here's one (you need to know how to use JOIN)
0
добавлено

Это потому, что эти продукты находятся в одной строке, добавьте ее как другую строку

0
добавлено
phpGeeks
phpGeeks
3 620 участник(ов)

Best PHP chat Еще: @dbGeeks - базы данных @phpGeeksJunior - новичкам @moscowProgers - IT Москва @ebanoePhp - весёлый канал о PHP @laravel_pro - Laravel @jobGeeks - вакансии @jsChat - JS Правила: https://t.me/phpGeeks/764859 ДР - 28.03.2016

DBA - русскоговорящее сообщество
DBA - русскоговорящее сообщество
1 345 участник(ов)

Общаемся и обсуждаем темы, посвященные DBA, PostgreSQL, Redis, MongoDB, MySQL, neo4j, riak и т.д. См. также: @devops_ru, @kubernetes_ru, @docker_ru, @nodejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание здесь было полезным и комфортным.

PHP
PHP
1 309 участник(ов)

Группа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/mkusher/711bd46f0b62fbae851182e6fb3b1839 Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev

PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
1 251 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs

MySQL
MySQL
995 участник(ов)

The group is about MySQL. For code use hastebin.com. Admin: @smlkw

phpGeeksJunior
phpGeeksJunior
980 участник(ов)

Группа для новичков. Не стесняйтесь задавать вопросы по php. Не флудить!!!! Правила и полезные ссылки https://gist.github.com/exileed/a53dd0617b35a705ff44b38c8028e6a5 Бест от пхпгикс https://t.me/best_of_phpgeeks

phpclub.ru
phpclub.ru
872 участник(ов)

Официальный чат phpclub.ru - остерегайтесь подделок #rules Правила группы - уважайте друг друга. Скриншоты -> ссылками. Код -> pastebin.com. Вакансии строго -> https://goo.gl/4bNxym, в чат ссылку. За рекламу и мат - БАН!

Devall | PHP
Devall | PHP
272 участник(ов)

Пристанище для восходящих звёзд разработки, которые перейдут на более адекватные языки. http://combot.org/chat/-1001014863761 Инвайт: j.mp/devallphp