2013-05-02 3 views
1

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

Это таблица ингредиенты This is the ingredients table

Это таблица recipeingredients, это имеет два первичных ключей, так что я могу назначить несколько ингредиентов для одного рецепта This is the recipeingredients table, this has two primary keys so I am able to assign multiple ingredients to one recipe

Это таблица рецепт This is the recipe table

Это поисковый запрос

<?php 
    $query = $_GET['query']; 
    // gets value sent over search form 

    $min_length = 3; 


    if(strlen($query) >= $min_length){ 

     $query = htmlspecialchars($query); 


     $query = mysql_real_escape_string($query); 
     // makes sure nobody uses SQL injection 

     $raw_results = mysql_query("SELECT * FROM recipes 
      WHERE (`recipename` LIKE '%".$query."%') OR (`ingredients` LIKE '%".$query."%')") or die(mysql_error()); 





     if(mysql_num_rows($raw_results) > 0){ // if one or more rows are returned do following 

      while($results = mysql_fetch_array($raw_results)){ 
      // $results = mysql_fetch_array($raw_results) puts data from database into array, while it's valid it does the loop 

       echo "<p>Recipe:".$results['recipename']."</p><p>Ingredients:".$results['ingredients']."<p>Instructions:".$results['instructions']."</p>"; 
       // posts results gotten from database(title and text) you can also show id ($results['id']) 
      } 

     } 
     else{ // if there is no matching rows do following 
      echo "No results"; 
     } 

    } 
    else{ // if query length is less than minimum 
     echo "Minimum length is ".$min_length; 
    } 
?> 

ингредиенты выборки данных

enter image description here

recipeingredients выборки данных

enter image description here

данных рецепта Таблица образца

enter image description here

+0

что ваш желаемый результат и опубликовать некоторые выборочные данные .. –

+1

Если вы новичок в JOINS наиболее разумным, что нужно сделать было бы узнать об этом, вместо того, чтобы спрашивать. – samayo

+0

[** Пожалуйста, не используйте 'mysql_ *' функции в новом коде **) (http://bit.ly/phpmsql). Они больше не поддерживаются [и официально устарели] (http://j.mp/XqV7Lp). См. [** красное поле **] (http://j.mp/Te9zIL)? Узнайте о [* подготовленных операторах *] (http://j.mp/T9hLWi) и используйте [PDO] (http://php.net/pdo) или [MySQLi] (http://php.net/ mysqli) - [эта статья] (http://j.mp/QEx8IB) поможет вам решить, какой из них. – Kermit

ответ

1
SELECT 
    r.*, 
    i.* 
FROM recipe AS r 
INNER JOIN recipeingredients AS ri 
    ON ri.recipeid = r.recipeid 
INNER JOIN ingredients AS i 
    ON i.ingredientid = ri.ingredientid 
WHERE r.recipename = 'Beans On Toast' 

Это даст вам рецепт и его ингредиенты.

редактирует

Вот как вы можете это сделать.

$query =" SELECT 
       r.*, 
       i.* 
      FROM recipe AS r 
      INNER JOIN recipeingredients AS ri 
       ON ri.recipeid = r.recipeid 
      INNER JOIN ingredients AS i 
       ON i.ingredientid = ri.ingredientid 
      WHERE r.recipename = 'Beans On Toast'"; 

$raw_results = mysqli_query($query) or die(mysqli_error()); 
+0

Как включить это в свой PHP, хотя я могу набрать любой рецепт в форме и отобразить рецепт и ингредиенты. Это был мой первоначальный вопрос. Я очень ценю вашу помощь. –

+0

Спасибо за вашу помощь, это не сработало, но это, наверное, что-то глупое, что я делаю. –

Смежные вопросы