php mysql高级选择
表1=事件->包含事件列表 表2=响应->保存用户列表响应的外键为eid,对应于事件表 我需要将这些表连接在一起,这样它就可以在php上返回类似的数组php mysql高级选择,php,mysql,select,Php,Mysql,Select,表1=事件->包含事件列表 表2=响应->保存用户列表响应的外键为eid,对应于事件表 我需要将这些表连接在一起,这样它就可以在php上返回类似的数组 array( 0 => array( 'title' =>'', //title of events table 'contents' =>'this is a demo', //contents of events table 'user
array(
0 => array(
'title' =>'', //title of events table
'contents' =>'this is a demo', //contents of events table
'users' => array( //users comes from response table
0 = array(
'firstname'=>'John',
),
1 = array(
'firstname'=>'James',
)
)
)
);
这能做到吗?仅使用mysql?因为我知道你可以在php上实现。你可以通过一个
JOIN
查询在MySQL中收集所有必要的数据
但是,默认情况下,PHP不会像您的示例那样返回数组。您必须循环查询结果集,并自己创建这样一个数组。正如Jason McCreary所说。为方便起见,这里是您需要的查询(尽管字段名可能与您的数据库结构不匹配,因为您没有提供此信息)
我很确定答案是否定的,因为mysql总是返回一个“平面”结果集。因此,您可以使用以下工具获得所需的所有结果:
SELECT e.title, e.contents, r.firstname
FROM events e LEFT JOIN response r ON e.id = r.eid
ORDER BY e.id, r.id
然后用php将其转换到数组中,但我想这是您已经在做的事情
编辑:
顺便说一下,如果您希望每个事件有一行,您可以使用GROUP\u CONCAT
:
SELECT e.title, e.contents, GROUP_CONCAT(DISTINCT r.firstname ORDER BY r.firstname SEPARATOR ',') as users
FROM events e LEFT JOIN response r ON e.id = r.eid
GROUP BY e.id
SQL是:
SELECT events.id, events.title, events.contents,
response.id AS rid, response.firstname
FROM events LEFT JOIN response
ON events.id = response.eid
我想我会向您展示如何按照您的意愿将结果按摩到阵列中:
$query = "SELECT events.id, events.title, events.contents, response.id AS rid, response.firstname
FROM events LEFT JOIN response ON events.id = response.eid";
$result = mysql_query($query);
$events = array();
while ($record = mysql_fetch_assoc($result)) {
if (!array_key_exists($record['id'], $events)) {
$events[$record['id']] = array('title' => $record['title'], 'contents' => $record['contents'], 'users' => array());
}
if ($record['rid'] !== NULL) {
$events[$record['id']]['users'][$record['rid']] = array('firstname' => $record['firstname']);
}
}
mysql_free_result($result);
+1对于串联,像这样的简单结果很容易分解结果字段。(假设firstname字段不包含分隔符。)
$query = "SELECT events.id, events.title, events.contents, response.id AS rid, response.firstname
FROM events LEFT JOIN response ON events.id = response.eid";
$result = mysql_query($query);
$events = array();
while ($record = mysql_fetch_assoc($result)) {
if (!array_key_exists($record['id'], $events)) {
$events[$record['id']] = array('title' => $record['title'], 'contents' => $record['contents'], 'users' => array());
}
if ($record['rid'] !== NULL) {
$events[$record['id']]['users'][$record['rid']] = array('firstname' => $record['firstname']);
}
}
mysql_free_result($result);