任何人都可以帮助我如何选择从多个MySQL表和排序的游戏限制15使用php?
<?php
//$query = "SELECT id, gamename, gameplayed FROM action, adventure, augur, beauty, chess, joke, mmorpg, multiplayer, platform, puzzle, racing, shooting, sport, stratergy WHERE id = :id";
$query = '
SELECT id, gamename, gameplayed FROM((
SELECT id, gamename, gameplayed
FROM action
ORDER BY gameplayed
DESC LIMIT 15
) UNION (
SELECT id, gamename, gameplayed
FROM adventure
ORDER BY gameplayed
DESC LIMIT 15
))as t ORDER BY gameplayed';
$query_params = array(':id' => '1');
//$query = "SELECT id, gamename FROM action, adventure, augur, beauty, chess, joke, mmorpg, multiplayer, platform, puzzle, racing, shooting, sport, stratergy ORDER BY gameplayed DESC LIMIT 15";
try
{
// These two statements run the query against your database table.
$stmt = $db->prepare($query);
$stmt->execute($query_params);
}
catch(PDOException $ex)
{
// Note: On a production website, you should not output $ex->getMessage().
// It may provide an attacker with helpful information about your code.
die("Failed to run query: " . $ex->getMessage());
}
$rows = $stmt->fetchAll();
foreach($rows as $row):
echo $rows['t'];
endforeach;
unset($row);
?>
我搜索谷歌发现解决方案是使用联合,但我一直得到错误"未定义索引t"
尝试将SQL查询更改为
SELECT id, gamename, gameplayed
FROM action
LIMIT 15
UNION
SELECT id, gamename, gameplayed
FROM adventure
ORDER BY gameplayed DESC
LIMIT 15
ORDER BY gameplayed
在您的选择查询中没有看到名为"t"的字段?试着var_dump()
$rows
,然后你可能会发现哪里出了问题。
你正在做的是选择一个表别名。您不能选择它们,只能选择字段。
您的结果现在应该看到您的数组$rows
的子数组的开始,就像第一个表和第二个表的元素一样,混合,遵循gameplayed
列中的顺序。
您是否尝试将UNION的所有结果选择为别名't'
?这是行不通的,你必须一个一个地使用它们,例如:
...UNION (
SELECT t.id as 'tid', t.gamename as 'tgamename', t.gameplayed as 'tgameplayed'
FROM adventure AS t
...
$row['tid']; $row['tgamename']; $row['tgameplayed']