Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php mysql高级选择_Php_Mysql_Select - Fatal编程技术网

php mysql高级选择

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

表1=事件->包含事件列表

表2=响应->保存用户列表响应的外键为eid,对应于事件表

我需要将这些表连接在一起,这样它就可以在php上返回类似的数组

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);