我想查詢一個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 –