2012-05-07 10 views
0

質問を作成することが困難です。私はたくさんのグーグルではありますが、適切な解決策を見つけられませんでした。 私はテーブルには、 'ブログ'(親)と 'エントリ'(子)と呼ばれるテーブルと呼ばれています:クエリのためのSQLのforeach相当

ブログ

  • ID
  • 対象
  • 所有者

エントリ

  • ID
  • (1 =公開、0 =未公表)
  • はDATE_CREATED公開
  • をblog_id(タイムスタンプ、作成および公開された場合)

ブログは複数のエントリを有しています。公開されたエントリのみが他のユーザーに表示されます。

最新の10個の変更されたブログを取得するクエリを作成したいとします。このために、私はおそらくすべてのブログを検索するSQLに「foreachの」同等のものを必要とするだろう、と最新の公表エントリ(entry.date_modified)で注文したがentry.published = 1つの

マイSQLの知識がオンにされていない場合のみこのようなクエリを作成できるレベルです。 追加情報:私はそれが動作しないだろうことを知って、これを試してみましたが、それは私が欲しい私は

SELECT blog.id 
FROM blog 
JOIN entry ON entry.blog_id = blog.id 
WHERE entry.published = 1 
ORDER by entry.date_created desc 
LIMIT 0, 10 

を達成しようとしています何のための参照としてあなたを助けるかもしれないMySQLの

とPHP(CodeIgniterの)を使用して、私の最終的な結果は、自分の子供のエントリが最も再会された10のblog.idです。誰かが助けてくれますか?すべての援助は非常に高く評価されます。

これは1つのクエリでは実現できない場合は、おそらくPHPで私はforeach文で個別のクエリを実行できますか?

+0

バグがあなたの例ではあります:entry.date_created対entry.date_modified ... – home

+0

はあなたが最新のブログに言及...あなたが意味しますか最新のブログそのもの、または特定の「アクティブな」ブログに投稿されたエントリーを表示します。例:20日前から1つのブログが今日新鮮な投稿となり、10日前に "利用可能"である実際のブログと比較して... 20日前のブログは、 – DRapp

+0

@DRappこれは後者を意味します。最新の子供(エントリ)を持つ20日前のブログは、私が示す必要があるものです。投票された答えは私にちょうどそれを与えた。 – Dogla305

答えて

1

SELECT blog_id 
FROM entry 
WHERE published = 1 
GROUP BY blog_id 
ORDER BY MAX(date_created) DESC 
LIMIT 0, 10 
+0

'MAX(date_created) ''は単一の結果を返しますか? – James

+0

@James「注文」の中の「MAX」の評価は、「SELECT」の場合と同じ方法で行われると(確認が必要です) – Romain

0

これはおそらく必要なものです。

私はこれがうまくいくと信じて
SELECT blog_id 
FROM entry 
WHERE published = 1 
Group By blog_id 
ORDER by date_created desc 
LIMIT 0, 10 
+0

ヘイジェームズ、ありがとう。 PHPmyadminは私に構文エラーを与えているが、それは私が必要なものかもしれないようだ...: #1064 - SQL構文に誤りがあります。あなたのMySQLサーバのバージョンに対応するマニュアルをチェックしてください。正しい構文は、 'Group By blog_id LIMIT 0、10'の5行目近くで使用してください。 – Dogla305

+0

ええ、Romainが正しいです。 Order Byの前にGroup Byを置くだけです。 – James

+0

はい、ごめんなさいRomain、私はまだあなたのコメントを読んでいない。あなたは正しい、偉大な努力の人、私はそれが働いたと思います。申し訳ありませんが、簡単なことでしたが、私のSQLエクスペリエンスは最小限です。 – Dogla305