我的数据库
CREATE TABLE `mytable` (
`id` smallint(4) UNSIGNED NOT NULL,
`name` char(30) NOT NULL,
`country` char(30) NOT NULL
)
ENGINE=MyISAM DEFAULT CHARSET=utf8;
我的数据
id | name | country
-----|-------------------|--------
1 | Tom Hanks | Usa
2 | Monica Bellucci | Italy
3 | Takeshi Kitano | Japan
4 | Javier Bardem | Spain
5 | Jim Carrey | Canada
6 | Luc Besson | France
7 | Leonardo DiCaprio | Usa
8 | Pedro Almodovar | Spain
9 | Ryan Gosling | Canada
10 | Terence Hill | Italy
11 | Jean Reno | France
12 | Roland Emmerich | Germany
13 | Mamoru Hosoda | Japan
14 | James Cameron | Canada
15 | Tom Cruise | Usa
16 | Penélope Cruz | Spain
17 | Sergio Leone | Italy
18 | Claude Lelouch | France
19 | Max Riemelt | Germany
20 | Hiroyuki Sanada | Japan
我有一个搜索输入文本(用于输入国家/地区名称),我在下拉列表中显示数据库中的现有国家
我的查询发送一个关键字并返回我的国家/地区(带有ID),它运行正常,但它显示有重复的国家
<?php
require_once '../config/dbconnect.php';
if(!empty($_POST["keyword"])) {
$result = $conn->query("SELECT id, country FROM mytable WHERE country LIKE '%".$_POST["keyword"]."%' ORDER BY country LIMIT 10");
$rowCount = $result->num_rows;
if($rowCount > 0){
while($row = $result->fetch_assoc()){
echo '<option value='.$row["id"].'>'.$row["country"].'</option>';
}
}
}
?>
问题在于我必须显示没有重复的国家/地区,只有不同的值,而且我找不到解决方案,
我使用了GROUP BY
条款,但它不起作用,下拉列表保持空白,我不知道如何解决问题
<?php
require_once '../config/dbconnect.php';
if(!empty($_POST["keyword"])) {
$result = $conn->query("SELECT id, country FROM mytable WHERE country LIKE '%".$_POST["keyword"]."%' GROUP BY country");
$rowCount = $result->num_rows;
if($rowCount > 0){
while($row = $result->fetch_assoc()){
echo '<option value='.$row["id"].'>'.$row["country"].'</option>';
}
}
}
?>
感谢您的帮助!
答案 0 :(得分:0)
只是精确度
我不能使用SELECT DISTINCT country FROM mytable,因为我还需要存储在选项值中的id
id用于另一个查询(当我点击dropodown列表时)以显示与所选国家/地区对应的名称
答案 1 :(得分:0)
您遇到数据库设计问题。您将名称和国家/地区混合在一个表中。因此表中的ID引用了它们。
您有两种选择:
SELECT DISTINCT country FROM mytable
并更新您的其他查询(当您点击下拉列表时)。您可以通过此查询显示与国家/地区相对应的名称:SELECT name FROM mytable where country ='".$country."'
。更难但更好:通过Second Normal Form更新数据库架构(为国家/地区创建新表并更新mytable中的条目。)
您可以使用此脚本:
CREATE TABLE `countries` (
`id` int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` char(30) NOT NULL
);
INSERT INTO countries (name) SELECT DISTINCT country as name FROM mytable;
ALTER TABLE `mytable`
ADD `country_id` int(10) unsigned NOT NULL,
ADD FOREIGN KEY (`country_id`) REFERENCES `countries` (`id`);
UPDATE mytable SET country_id = (SELECT id FROM countries WHERE name = country);
ALTER TABLE `mytable` DROP `country`;
之后您可以显示国家/地区:
<?php
require_once '../config/dbconnect.php';
if(!empty($_POST["keyword"])) {
$result = $conn->query("SELECT id, name FROM countries WHERE name LIKE '%".$_POST["keyword"]."%' ORDER BY name LIMIT 10");
$rowCount = $result->num_rows;
if($rowCount > 0){
while($row = $result->fetch_assoc()){
echo '<option value='.$row["id"].'>'.$row["name"].'</option>';
}
}
}
?>
请勿忘记更新您的其他查询以按country_id
过滤:
SELECT name FROM mytable where country_id ='".$countryId."'