我想查询一个 mysql 表(jos_fieldsattach_values)表的一些数据,这让我的大脑在冒烟。
给定的表具有以下我无法更改的结构:
id | articleid | fieldsid | value
该表包含新闻日期。见:http ://sqlfiddle.com/#!2/8f9bf/1
目的是将未来五天内的每个新闻数据输出为对象或数组。难点在于该表没有“新闻日期”或“字幕”等字段,而是将所有内容保存在“值”字段中。我可以通过“fieldsid”的值来识别数据的种类。Fe Dates 总是在 (4,7,10) 中有一个 fildsid,或者字幕在 (14,15,16) 中有一个 fieldid,依此类推。这非常不方便,但正如我所说,我无法更改表结构或数据保存方式。
我的第一步是获取未来五天内有新闻的文章
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<>''
我正在加入 jos_fieldsattach_values 和 jos_content 以进一步获取文章标题我从我的第一个查询中知道哪些 articleids 有新闻要显示 WHERE a.articleid in(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
)
)
其中日期是第一个数组,第二个数组具有数据标题。每个 Array 及其子数组具有相同的文章 ID。
感谢每一个方法,
托尼