2014-09-22 41 views
0

好吧,我有一个数据库中的信息,我需要显示,但无法正确调用它。SQL SELECT,显示来自多列的多行

ID  Name sid   pos 
------------------------------- 
0  John 71829182 -30, 21, 0 
1  John 71829182 -21, 21, 54 
2  John 71829182 43, 21, -37 
3  John 71829182 98, 21, 21 

我需要显示具有相同的SID列,所以当呼应了使用PHP的所有行会像

约翰在71829182在这些位置被看作-30,21,0 | -21,21,54 | 43,21,-37 | 98,21,21

我无法弄清楚,所以可以使用建议。

+0

现在我只是做一个基本的查询和$ row ['pos'] – 2014-09-22 19:44:02

回答

0

如果你有兴趣在一个SQL解决方案,您可以使用GROUP_CONCAT到行合并成一列:

SELECT name, sid, GROUP_CONCAT(pos SEPARATOR '|') positions 
FROM yourtable 
GROUP BY name, sid 

编辑,给你的评论,这应该工作:

SELECT playername, steamID, position, lastlogin, 
     GROUP_CONCAT(position SEPARATOR '|') positions 
FROM player 
GROUP BY playername, steamID ORDER by playername 

请不要在您的php代码中调用row['position'],而应该调用row['positions'],因为列名已更改。

+0

这似乎并没有工作,给我一个错误。 '; $ sql = mysql_query(“SELECT playername,SteamID,position,lastlogin GROUP_CONCAT(position SEPARATOR'|')positions FROM Player GROUP BY playername,SteamID ORDER by playername”); \t while($ row = mysql_fetch_array($ sql)){ \t \t echo'While'。$ row ['playername']。'最后一次出现在这些位置'。$ row ['position']。''; \t} – 2014-09-22 20:03:53

+0

@JoshuaNightingale:你在SELECT列表中的lastlogin和GROUP_CONCAT()之间缺少表达式之间的逗号。这是2014年。为什么我们仍然*使用mysql_接口,而不是PDO或mysqli? – spencer7593 2014-09-22 20:07:26

+0

您错过了lastlogin和GROUP_CONCAT之间的逗号。总是测试语句是否成功使用if($ sql!== false) – Gervs 2014-09-22 20:07:58

0

您需要填写:YOUR_DB_SERVER,YOUR_DB_NAME,YOUR_USERNAME,YOUR_PASSWORD,YOUR_TABLE

$db = new PDO('mysql:host=YOUR_DB_SERVER;dbname=YOUR_DB_NAME;charset=UTF8', 'YOUR_USERNAME', 'YOUR_PASSWORD'); 
$db->query('select * from YOUR_TABLE WHERE sid = YOUR_SID'); 
$res = $db->fetchAll(PDO::FETCH_ASSOC); 
print_r($res); 

此示例使用PDO,其中大多数人在这里会建议您使用的DB接口在PHP中,由于其强大的本质,主要是它能够避免SQL注入并支持许多DB类型。还有一些其他功能可以用来与数据库交互,但它们是传统的,并且不会长久。

在上面的示例中,fetchAll用于获取所有结果;您也可以对一行使用fetch(),对一行使用fetchColumn()。

PDO :: FETCH_ASSOC告诉PDO返回一个字段名绑定到字段值的数组。还有其他选项,请参阅PHP手册了解详细信息。

+1

调用也是mysqli一样健壮,但只能连接到MySQL数据库 – DirtyRedz 2014-09-22 20:01:30