【问题标题】:How to retrieve data from table A using data from table B in my autosuggest script?如何在我的自动建议脚本中使用表 B 中的数据从表 A 中检索数据?
【发布时间】:2013-03-18 04:16:44
【问题描述】:

我正在学习php和mysql,现在遇到了一个问题。

我正在使用自动建议 php/javascript 脚本,它开箱即用,基本上以 html 形式接受用户输入,使用 javascript 将用户输入发送到我的 php 文件,在该文件中使用“LIKE”搜索数据库query 命令,然后返回一个 html 列表,其中的列表项包含查询找到的“名称”数据。

现在我的问题是:我的数据库中有两个表,wp_terms 和 wp_term_taxonomy(参见下面的插图)。目前,查询搜索“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!';
        }
    }
?>

【问题讨论】:

  • 我编辑了您的帖子以包含您之前超链接到的图像。

标签: php mysql sql autosuggest


【解决方案1】:

您需要使用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 的行。

顺便说一句,你真的应该使用PDObinding parameters。 MySQLi 将disappoint you in the long run,我相信它的使用甚至可能会被弃用。

【讨论】:

  • 美丽。太感谢了!这让我很开心!
  • @user1991083 很高兴我能帮上忙!感谢您接受我的回答 - 如果您不介意,我也将不胜感激。 ;)
  • 我没有投票所需的 15 声望:/ 如果我记得的话,我稍后会回来给你投票:) 无论如何,再次感谢。
  • @user1991083 啊,好的。 :) 当然!
猜你喜欢
  • 2020-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-06
  • 1970-01-01
  • 2016-03-17
相关资源
最近更新 更多