2013-03-27 5 views
2

Я изучаю php и mysql и теперь столкнулся с проблемой.Как извлечь данные из таблицы A, используя данные из таблицы B в моем сценарии автозапуска?

Я использую скрипт autosuggestion php/javascript, который изначально использует вход пользователя в форме html, использует javascript для отправки пользовательского ввода в файл php, где он ищет через базу данных с помощью «LIKE «query command», а затем возвращает список html с элементами списка, содержащими данные «name», найденные в запросе.

Теперь на мой вопрос: У меня есть две таблицы в моей базе данных, wp_terms и wp_term_taxonomy (см. Ниже иллюстрацию). В настоящее время запрос просматривает все записи в таблице «wp_terms» и выбирает запись «name». Но я хочу добавить какой-то фильтр. Я хочу только получить имена записей, которые имеют целое число «2» как «родительский».

Я думаю, что aproach для этого будет искать через «wp_term_taxonomy», сохраните «term_id» из записей с целым числом «2» в качестве родительского. Затем введите другой запрос, который проходит через таблицу «wp_terms» и выводит «имена» сохраненных «term_id».

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

базы данных таблицы иллюстрации: enter image description here

Мой autosuggest.php код. Это были волшебство происходит:

<?php 
    $db_host = 'localhost'; 
    $db_username = 'user'; 
    $db_password = 'passw'; 
    $db_name = 'db'; 

    $db = new mysqli($db_host, $db_username ,$db_password, $db_name); 

    if(!$db) { 

     echo 'Could not connect to the database.'; 
    } else { 

     if(isset($_POST['queryString'])) { 
      $queryString = $db->real_escape_string($_POST['queryString']); 

      if(strlen($queryString) >0) { 

       $query = $db->query("SELECT name FROM wp_terms WHERE name LIKE '$queryString%' LIMIT 10"); 

       if(mysqli_num_rows($query) > 0) { 
        if($query) { 
        echo '<ul>'; 
         while ($result = $query ->fetch_object()) { 
          echo '<li onClick="fill(\''.addslashes($result->name).'\');">'.$result->name.'</li>'; 
         }  
        echo '</ul>'; 

        } else { 
         echo 'OOPS we had a problem :('; 
        } 
       } else { 
        echo '<ul>'; 
        echo '<span style="color:#0196E3";>'.$queryString.'</span> no matches found.'; 
        echo '</ul>'; 
       } 
      } else { 
       // do nothing 
      } 
     } else { 
      echo 'There should be no direct access to this script!'; 
     } 
    } 
?> 
+0

Я отредактировал ваше сообщение, чтобы содержать изображение, на которое вы ранее ссылались. – Leng

ответ

0

Вы должны использовать JOIN для достижения этой цели.

SELECT `wp_terms`.`name` 
FROM `wp_terms` 
INNER JOIN `wp_term_taxonomy` 
ON `wp_terms`.`term_id`=`wp_term_taxonomy`.`term_id` 
AND `wp_term_taxonomy`.`parent`=2 
WHERE `wp_terms`.`name` LIKE '$queryString%' 
LIMIT 10 

Take a look here for visual explanations of how joins work.

В основном, когда вы делаете присоединиться, вы совмещая обе таблицы, на основании которых присоединиться вы используете. Этот запрос внутренний соединяет таблицы, основанные на term_id, и гарантирует, что вы будете возвращать только строки, где parent равно 2.

Кстати, вы действительно должны использовать PDO и binding parameters. MySQLi будет disappoint you in the long run, и я считаю, что его использование может даже быть устаревшим.

+0

Красивые. Спасибо огромное! Это сделало мой день! – user1991083

+0

@ user1991083 Рад, что я мог помочь! Спасибо, что согласился на мой ответ - я тоже был бы признателен за повышение, если вы не возражаете. ;) – Leng

+0

У меня нет необходимой репутации 15, чтобы проголосовать:/Я вернусь позже и дам вам верх, если я его запомню :) Во всяком случае, еще раз спасибо. – user1991083

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