0

我创建了这个查询来使用 jQuery 显示我的自动完成框。它运行良好。

<?php

require_once('database.php');

if(isset($_POST['queryString'])) {

    $queryString = $dbc->real_escape_string($_POST['queryString']);

    if(strlen($queryString) >0) {
        $q = "SELECT keyword 
                FROM (
                    SELECT tname AS keyword FROM t
                    UNION
                    SELECT sname AS keyword FROM sub
                    UNION
                    SELECT cname AS keyword FROM c
                    UNION
                    SELECT iname AS keyword FROM i
                ) s
              WHERE keyword LIKE '%$queryString%' 
              LIMIT 10";

        $r = mysqli_query ( $dbc, $q);

        if($q) {
            while ($row = mysqli_fetch_array($r, MYSQL_ASSOC)) {
                echo '<li onClick="fill(\''.$row['keyword'].'\');">'.$row['keyword'].'</li>';
            }
        } else {
            echo 'ERROR: There was a problem with the query.';
        }
    } else {

    }
} else {
    echo 'There should be no direct access to this script!';
}

?> 

使用此查询根据关键字显示带有主题、导师姓名、城市的自动完整列表。现在我需要用更多值修改自动完成列表。例如,列表中有一个导师姓名,我想显示他/她的当前城市、他/她的个人资料图片等。这类似于 Facebook 搜索。

这是我的城市和地址表

# --------------
# Address Table
# --------------

CREATE TABLE address (
address_id INT(4) UNSIGNED NOT NULL AUTO_INCREMENT,
address_one VARCHAR(40) NOT NULL, 
address_two VARCHAR(40) DEFAULT NULL, 
city_id INT(4) UNSIGNED NOT NULL,
PRIMARY KEY (address_id),
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


# --------------
# City Table
# --------------

CREATE TABLE city(
city_id INT(4) UNSIGNED NOT NULL AUTO_INCREMENT,
city_name VARCHAR(30) NOT NULL, 
district_id INT(2) UNSIGNED NOT NULL,
PRIMARY KEY (city_id),
UNIQUE (city_name)
) ENGINE=MyISAM;

我怎样才能做到这一点?

4

1 回答 1

0

我认为有2个选择。

我相信你应该调整你的查询,因为现在你在 t 表和子表中检查搜索词是否出现。但是,您的查询很短,以至于您没有可用的匹配个人资料信息,只有您执行搜索的列。

当然,您不想从甚至不符合您的条件的行中查询大量数据。另一方面,在您执行搜索后进行大量查询并不那么方便。但是,由于您的限制为 10,所以应该没问题。

将您的查询更改为select name, birthday, gender, imgdata from t等。

于 2012-11-26T15:41:02.997 回答