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