在我的网站上,我有一个带有选择字段的表单。在那个领域,我用一些ajax代码给出了输入的建议。这些建议来自我在每次按键时动态创建的.json文件。
所以这个JSON文件填充了一个列表。
JSON文件:
{
"suggestions": [
{
"value": "Commandos: Behind Enemy Lines"
},
{
"value": "Commandos 3: Destination Berlin"
},
{
"value": "Commandos 2: Men of Courage"
},
{
"value": "Commandos: Beyond the Call of Duty"
}
]
}
然而,该列表由两个表组成。这些表彼此没有任何关系。两张桌子都有一个游戏名称'这只是一个VARCHAR列,我希望这两个列成一个大列表。在一个列表中从它们获得结果的最佳(最有效)方法是什么?
数据库
表1(赠品)
赠品| gamename
-
表2(steam_app)
appid |名字|型
我现在正在做的是对MySQL进行2次单独查找,然后将所有结果放入一个PHP数组中。我还对每个结果执行array_search以防止重复输入。
<?php
// query - BQ Game List
$sql = "SELECT
gamename as value
FROM giveaway
WHERE gamename LIKE '$query%'
GROUP BY gamename
ORDER BY count(gamename) DESC
LIMIT 50";
$result = mysqli_query($dbConnection, $sql);
if ($result->num_rows > 0) {
while ($row = mysqli_fetch_assoc($result)) {
$json['suggestions'][] = $row;
// create one array with all results to make it easier to use array_search()
$haystack[] = $row['value'];
}
}
// query - Steam App List
$sql = "SELECT
name as value
FROM steam_app
WHERE name LIKE '$query%'
AND (type = 'game'
OR type = 'dlc')
ORDER BY name
LIMIT 50";
$result = mysqli_query($dbConnection, $sql);
if ($result->num_rows > 0) {
while ($row = mysqli_fetch_assoc($result)) {
// Check if value isn't already in the array
if (array_search($row['value'], $haystack) === false) {
$json['suggestions'][] = $row;
// create one array with all results to make it easier to use array_search()
$haystack[] = $row['value'];
}
}
}
// No results
if (!isset($json)) {
$json['suggestions'] = '';
}
// CLOSE CONNECTION
mysqli_close($dbConnection);
echo json_encode($json);
?>
现在我想知道这是多么有效率。由于执行两个单独的查找和大量的array_searches听起来像3个资源密集型操作。因为在表单字段中的每次按键时都会调用此查询。我想知道单个MySQL查询是否效率更高。例如,使用UNION。
对此有何见解?