我想查询一个MySQL表(jos_fieldsattach_values)的一些数据,这使得我的大脑吸烟。mysql查询未规范化的表中加入和子查询
给定的表有以下结构,我无法改变:
id | articleid | fieldsid | value
的表保存新闻的日期。 参见:http://sqlfiddle.com/#!2/8f9bf/1
目的是将每个新闻数据输出为未来五天内的对象或数组。关于这一点的难点在于表格没有诸如“新闻日期”或“副标题”之类的字段,而是将所有内容保存在字段“值”中。我可以通过“fieldsid”的值来识别数据的类型。 F.e日期在(4,7,10)中将始终有一个fildsid,或者字幕在(14,15,16)中有字段,等等。这是极端不方便的,但正如我所说的,我无法更改表格结构或数据保存的方式。
我的第一步是让具有内未来五天
SELECT
articleid
FROM
`jos_fieldsattach_values`
WHERE
value > NOW() and value < NOW() + INTERVAL 5 DAY
输出是新闻的文章:316,271,271
下一步是在那里我有问题:
SELECT a.value,b.title, b.id FROM
jos_fieldsattach_values as a
INNER JOIN
jos_content as b ON (a.articleid = b.id)
WHERE a.articleid in (271,216) and a.fieldsid in (14,15,16) and value<>''
I'm与jos_content加入jos_fieldsattach_values进一步,我知道拿到文章标题从articleids有消息显示我第一次查询10 WHERE中的a.articleid(216,271)
我苦恼的是如何排序或查询数据作为对象。在伪码:
WHERE
a.articleid in (271,216) // query rows with article ids only
AND
a.fieldsid in (14,15,16) as subtitle // if fieldsid is X it has to be a subtitle
AND
a.fieldsid in (4,7,10) as date // if fieldsid is Y it has to be a subtitle
编辑:输出将作为二维阵列是有用的。类似:
Array
(
[2013-08-09] => Array // fieldsid in (4,7,10, …)
(
[0] => News Title 1 // fieldsid in (1,2,3, …)
[1] => News Subtitle 1 // fieldsid in (14,15,16, …)
[2] => News Text 1 // fieldsid in (5,6,7, …)
)
[2013-08-08] => Array
(
[0] => News Title 2
[1] => News Subtitle 2
[2] => News Text 2
)
[2013-08-07] => Array
(
[0] => News Title 3
[1] => News Subtitle 3
[2] => News Text 3
)
)
其中的日期的第一阵列和第二阵列具有数据标题。每个数组及其子数组具有相同的文章ID。
感谢每一个方法,
托尼
什么是您预期的输出? – Aris
当你描述领域Assn –
嗨阿里斯和彼得,我编辑了问题,以显示预期的输出。这些字段从joomla第三方组件中保存下来,我无法更改;(谢谢,toni –