Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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
mysql联合命名表属性_Mysql_Sql_Union - Fatal编程技术网

mysql联合命名表属性

mysql联合命名表属性,mysql,sql,union,Mysql,Sql,Union,执行此查询时: select id as current from events where date = '{$result['date']}' union all (select id as previous from events where date < '{$result['date']}' order by date desc limit 1) union all (select id as next from events where date > '{$result[

执行此查询时:

select id as current from events where date = '{$result['date']}'
union all
(select id as previous from events where date < '{$result['date']}' order by date desc limit 1)
union all
(select id as next from events where date > '{$result['date']}' order by date asc limit 1)
但是,阵列的外观如下所示:

Array
(
    [0] => Array
    (
        [current] => 6
    )

    [1] => Array
    (
        [current] => 5
    )

    [2] => Array
    (
        [current] => 7
    )

)
我需要assoc数组来描述正确的键

即使在我的SQL中,我是这样做的

选择id作为当前id
选择id作为上一个
选择id作为下一个

它们都以当前的形式出现


有什么想法吗?

工会不是这样运作的。它们返回一组ID,并且所有的列名都相同


在您的特定情况下,运行3个单独的查询会更清晰

列具有相同名称的原因是,当您进行两个或多个查询时,最顶端查询中的列名称始终是最终结果中显示的名称,而与后续查询中的列名称无关(它们基本上被忽略)

“第一个SELECT语句中的列名用作返回结果的列名。”


相反,为什么不在一个查询中获取单独列中的id呢

SELECT a.id AS current, prev.id AS previous, next.id AS next
FROM events a
CROSS JOIN 
(
    SELECT id FROM events 
    WHERE date < '{$result['date']}' 
    ORDER BY date DESC 
    LIMIT 1
) prev
CROSS JOIN 
(
    SELECT id
    FROM events 
    WHERE date > '{$result['date']}' 
    ORDER BY date 
    LIMIT 1
) next
WHERE a.date = '{$result['date']}'

正如其他答案所指出的,不可能得到这样的结果

当我需要类似于您显示的内容时,我将包含一个文本作为标识符,用于显示哪个查询返回了值:

select 'current' as source, id from events where date = '{$result['date']}'
union all
(select 'previous', id from events 
  where date < '{$result['date']}' order by date desc limit 1)
union all
(select 'next', id from events 
  where date > '{$result['date']}' order by date asc limit 1)

我认为你说的是实话,先生。。。干杯!啊,这个查询有问题!如果没有更低或更高的日期,则不会返回结果集!有没有办法解决这个问题?如果该日期是其可能的最低日期,它仍必须返回下一个日期。反之亦然!你对我之前的评论有什么看法吗?谢谢你的帮助你可以使用左外连接。或三个单独的查询:-)另一种方法是在每个查询的选择列表中包含一个文本字符串(例如“当前”、“上一个”、“下一个”),并将其作为结果集的一部分返回。这与您想要的结果不匹配,但它确实为您提供了一个可以使用的结果集。这避免了三个单独查询的开销,并避免了在使用联接时出现“缺少”行的问题。(见我的答案。)
Array
(
    [0] => Array
    (
        [current] => 6
        [previous] => 5
        [next] => 7
    )
)
select 'current' as source, id from events where date = '{$result['date']}'
union all
(select 'previous', id from events 
  where date < '{$result['date']}' order by date desc limit 1)
union all
(select 'next', id from events 
  where date > '{$result['date']}' order by date asc limit 1)
Array
(
  [0] => Array
  (
     ["source"] => "current"
     ["id"]     => 6
  )
  [1] => Array
  (
     ["source"] => "previous"
     ["id"]     => 5
  )
  [2] => Array
  (
     ["source"] => "next"
     ["id"]     => 7
  )
)