私はphpとmysqlを学んでいますが、今問題に遭遇しました。
私は自動提案の php/javascript スクリプトを使用しています。このスクリプトは、基本的には html 形式でユーザー入力を取得し、javascript を使用してユーザー入力を php ファイルに送信し、そこで「LIKE」クエリ コマンドを使用してデータベースを検索します。次に、クエリで見つかった「名前」データを含むリスト項目を含む html リストを返します。
ここで私の質問:データベースに wp_terms と wp_term_taxonomy の 2 つのテーブルがあります (以下の図を参照)。現在、クエリは「wp_terms」テーブルのすべてのエントリを検索し、「name」エントリを選択します。しかし、一種のフィルターを追加したいと思います。「親」として整数「2」を持つエントリの名前のみを取得したいと考えています。
これへのアプローチは、「wp_term_taxonomy」を検索し、整数「2」を親としてエントリの「term_id」を保存することだと思います。次に、「wp_terms」テーブルを通過し、保存された「term_id」の「名前」を出力する別のクエリを作成します。
これが正しいアプローチであるかどうかはわかりません。私は何日も試しましたが、成功しませんでした。本当に助けていただければ幸いです。
データベース テーブルの図:
私の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!';
}
}
?>