SQL SELECT,显示多列中的多行

时间:2014-09-22 19:38:54

标签: php mysql

好的,我在需要显示的数据库中有信息,但无法正确调用它。

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回显时,它就像

John在71829182被发现在这些位置-30,21,0 | -21,21,54 | 43,21,-37 | 98,21,21

我无法理解,所以可以使用建议。

2 个答案:

答案 0 :(得分: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,由于其强大的性质,主要是它能够避免SQL注入和支持许多数据库类型,因此大多数人会建议您使用它来与PHP中的DB进行交互。您可以使用许多其他功能来与DB进行交互,但它们是遗留的,并且不会存在更长时间。

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

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

答案 1 :(得分: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'],因为列名已更改。