我想查询mysql表(jos_fieldsattach_values)表的一些数据,这会使我的大脑吸烟。
给定的表格具有以下结构,我无法改变:
id | articleid | fieldsid | value
该表包含新闻日期。 请参阅:http://sqlfiddle.com/#!2/8f9bf/1
目的是将每个新闻数据输出为未来五天内的对象或数组。关于这一点的困难之处在于该表没有“新闻日期”或“副标题”之类的字段,而是将所有内容保存在字段“值”中。我可以通过“fieldsid”的值来识别数据类型。 F.e日期总是在(4,7,10)中有fildsid,或者字幕在(14,15,16)中有fieldids,依此类推。这绝对是不方便的,但正如我所说,我不能改变表结构或数据的保存方式。
我的第一步是在接下来的五天内获得有新闻的文章
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_content加入jos_fieldsattach_values以获取文章标题我从第一个查询中知道哪些文章有新闻要显示 在(216,271)
中的a.articleid我努力的方法是如何订购或查询数据作为对象。在伪代码中:
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。
感谢每一种方法,
托尼
答案 0 :(得分:0)
好吧,可能不是最好的方式,但它有效:
// Array for Field Date
$dates = array("4", "7", "10");
// Array for Field Zusatz
$zusatz = array("14", "15", "16");
// Array for Field Typ
$types = array("5", "8", "11");
// Array for Field Beschreibungstext
$desc = array("6", "9", "12");
$rows = array();
// FIll News Array with Data
while ($row = mysql_fetch_array($result)) {
// Filter for wrong date
if ($row{'value'} !== "1970-01-01"){
// if field has date value
if (in_array($row{'fieldtype'}, $dates)) {
$rows[$row{'value'}] = array();
$datum = $row{'value'};
$rows[$datum]["id"] = $row{'id'};
$rows[$datum]["datum"] = $row{'value'};
$rows[$datum]["title"] = $row{'title'};
$rows[$datum]["alias"] = $row{'alias'};};
if (in_array($row{'fieldtype'}, $zusatz)) {$rows[$datum]["Untertitle"] = $row{'value'};}; // if field has Subtitle
if (in_array($row{'fieldtype'}, $types)) {$rows[$datum]["Art"] = $row{'value'};} // if field has kind of value
if (in_array($row{'fieldtype'}, $desc)) {$rows[$datum]["Beschreibung"] = $row{'value'};} // if field has descripton value
}
}