«Поиск в базе данных с использованием нескольких флажков» - PullRequest
1 голос
/ 28 февраля 2012

У меня есть страница с несколькими флажками, каждый из которых соответствует каждому ингредиенту (рис.1)

База данных называется «Рецепты»

(рис.1)
Название таблицы = 'ингредиенты'

  • ID ингредиента
  • 1 оливковое масло
  • 2 черного перца
  • 3 бульона

и т. Д. ......

эта таблица является основной, и по мере роста сайта будет увеличиваться количество ингредиентов и соответствующих флажков.

У меня также естьеще несколько таблиц, каждая из которых является рецептом (рис.2)

(рис.2)
Название таблицы = 'Лазанья'

ингридиент_id

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

и так далее ......

для каждого рецепта ингридиент_идентификатора соответствует одному из идентификаторов в главной таблице (рис.1).


Я хочу, чтобы кто-то мог выбрать в качествемного флажков, как они хотят.Когда они нажимают на кнопку «Отправить», они возвращают каждый рецепт, начиная с самого близкого, соответствующего ингредиентам, за которым следует буква az в верхней части ......... Я знаю, когда вы вводите echo, он печатает то, что вы говорите на экране...Если у меня на странице search.php есть таблица, может ли каждый результат рецепта отображаться в каждой строке таблицы в порядке, указанном выше?

Это то, что я имею до сих пор....

index.html ..

<form action="search.php" method="post" name="search_form" onsubmit="return checked boxes" >
<table width="571" border="0">
<tr>
<td width="183" valign="top"><input type="checkbox" name="search[]" value="Olive oil" id="1"/> Olive oil<br/>
<input type="checkbox" name="search[]" value="black pepper" id="2"/> Black pepper<br/>
<input type="checkbox" name="search[]" value="beef stock" id="3"/> Beef stock<br/>
<input type="checkbox" name="search[]" value="lean steak mince" id="4"/> Lean steak mince<br/>
<input type="checkbox" name="search[]" value="mushrooms" id="5"/> Mushrooms<br/>
<input type="checkbox" name="search[]" value="red onion" id="6"/> Red onion<br/>
<input type="checkbox" name="search[]" value="garlic" id="7"/> Garlic<br/>
<input type="checkbox" name="search[]" value="tomato concentrate" id="8"/> Tomato concentrate<br/>
<input type="checkbox" name="search[]" value="lasagna sheets" id="9"/> Lasagna sheets<br/>
<input type="checkbox" name="search[]" value="milk" id="10"/> Milk<br/></td>
<td width="171" valign="top"><input type="checkbox" name="search[]" value="cheese" id="11"/> Cheese<br/>
<input type="checkbox" name="search[]" value="butter" id="12"/> Butter<br/>
<input type="checkbox" name="search[]" value="plain flour" id="13"/> Plain flour<br/>
<input type="checkbox" name="search[]" value="chopped tomatos" id="14"/> Chopped tomato<br/></td>
<td width="195">&nbsp;</td>
</tr>
</table>
<input type="submit" value="search"/>
</form>'

search.php

$username = "root";
$password = "";
$hostname = "localhost"; 


$dbhandle = mysql_connect("localhost", "root","" ) 
or die("Unable to connect to MySQL");

$selected = mysql_select_db("recipes",$dbhandle) 
or die("Could not select recipes");'

Ответы [ 2 ]

0 голосов
/ 29 февраля 2012

Если вы никогда не добавите или не удалите рецепты из вашей системы, ваш общий дизайн имеет недостатки.Схема, которую большинство людей будет использовать для этого, больше похожа на:

  1. Таблица ингредиентов: ингридиент_id, имя, ...
  2. Таблица рецептов: recipe_id, name, ...
  3. Таблица ингредиентов рецепта: recipe_id, ингридиент_id, количество, ...

С вашим дизайном, вам нужно создать новую таблицу для каждого рецепта.Кроме того, чтобы найти рецепты, которые используют ингредиент, вам нужно искать десятки таблиц в каждой в отдельном запросе (или один очень грязный запрос с большим количеством UNIONs).

При таком дизайне вы просто выполняете поиск RECIPE_INGREDIENTS и присоединяетесь к RECIPES, чтобы получить имена рецептов для распечатки.

В любом случае, вы хотите создать в запросе предложение WHERE, проверивкаждый вариант ингредиента по очереди и добавление его в пункт.В псевдокоде:

$whereClause="WHERE ingredient in ("
for each ingredient {
   if(user selected $ingredient) {
      $whereClause .= "'" . $ingredient . "',"
   }
}
$whereClause .= ")"
0 голосов
/ 29 февраля 2012

Может быть, вы можете использовать команду LIKE в MySQL:

SELECT * FROM recipes WHERE agent LIKE something
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...