私の脳を喫煙させる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 を持ちます。
あらゆるアプローチに感謝し、
トニ