0

我想查询一个 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。

感谢每一个方法,

托尼

4

1 回答 1

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
}

}

于 2013-08-10T13:29:39.203 回答