0

私の脳を喫煙させるmysqlテーブル(jos_fieldsattach_values)テーブルのデータを照会したい。

指定されたテーブルには、変更できない次の構造があります。

id | articleid | fieldsid | value 

テーブルはニュースの日付を保持します。参照: http://sqlfiddle.com/#!2/8f9bf/1

目的は、次の 5 日間の各ニュース データをオブジェクトまたは配列として出力することです。これに関する難しい部分は、テーブルに「ニュースの日付」や「サブタイトル」などのフィールドがなく、すべてのコンテンツが「値」フィールドに保存されることです。「fieldsid」の値でデータの種類を識別できます。Fe Dates は常に (4,7,10) に fildsid を持ち、字幕は (14,15,16) に fieldid を持ちます。これは非常に不便ですが、前述のように、テーブル構造やデータの保存方法を変更することはできません。

私の最初のステップは、次の 5 日以内にニュースがある記事を取得することでした

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 を結合して、記事のタイトルをさらに取得します。最初のクエリでどの記事 ID にニュースが表示されるかがわかります。 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

編集: 出力は 2 次元配列として役立ちます。何かのようなもの:

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
  )
) 

日付は最初の配列で、2 番目の配列にはデータのタイトルがあります。各配列とその子配列は同じ記事 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 に答える