2011-12-22 9 views
2

"Today"、 "This Week"、 "This Month"、 "All Time"で記事を並べ替えようとしています。事は、私のクエリがあるテーブルの票を集計し、別のテーブルから記事を取得するということです。これは私にとって本当に複雑なクエリになります。今日、週、月ごとにPhPを注文していません。

とにかく、私はhttp://web.com/top.php?time=「ここにいくつかの時間」のようなページを持っていると私は、ユーザーが「ここにいくつかの時間を」ではなく

$time = preg_replace('#[^a-z]#i', '', $_GET["time"]); 

    if (!$time) { //Today 
    $date = "WHERE TO_DAYS(NOW()) - TO_DAYS(stories.st_date) = 1"; 
    } 
    else if ($time == "Week") { //This Week 
    $date = "WHERE TO_DAYS(NOW()) - TO_DAYS(stories.st_date) <= 7"; 
    } 
    else if ($time == "Month") { //This Month 
    $date = "WHERE TO_DAYS(NOW()) - TO_DAYS(stories.st_date) <= 31"; 
    } 
    else if ($time == "All") { //All Time 
    $date = ""; 
    } 
    else { 
    header("Location: http://www.web.com/"); 
    exit; 
    } 

$sql = ("SELECT stories.*, SUM(votes.vote_value) as 'total_votes' FROM stories JOIN votes ON stories.id = votes.item_name ".$date." GROUP BY stories.id ORDER BY total_votes DESC LIMIT 10") or die (mysql_error("There was an error in connection")); 

を選ぶ何時間に基づか記事を選択するには、次のコードを使用しますこれのどれもうまくいくとは思わない; DIはなぜ、私の意見では、しかし、私は比較的phpとmysqlの新しいです。誰もが問題が何であるかを提案することができますか?

システムの理解を深めるためのデータベース構造。

ストーリーテーブル

enter image description here


投票テーブルここ

enter image description here

+0

スクリプトでsqlを実行する前に、変数$ dateをscreenに出力し、その値が何であるかを確認してください。それをphpmyadminで実行して、それがphpかsqlの問題かどうか確認してください。 – ChelseaStats

+0

また、本当にitem_name(varchar)とid(int)を比較したいですか? – ChelseaStats

+0

まあ、$ dateは正しいです。すべてのケースでそれをエコーし​​ました – Ilja

答えて

1

がでSQLクエリ を書き換え、その後、

SELECT stories.*, SUM(votes.vote_value) as 'total_votes' 
    FROM stories JOIN votes ON stories.id = votes.item_name 
    WHERE votes.item_name=$date 
    GROUP BY stories.id ORDER BY total_votes DESC LIMIT 10 

または類似してみてくださいあなたが達成したいかを考えると、論理PHPS日付機能に慣れるしますPHPに入れる前に適切な出力が得られるまでphpmyadminを実行してください。

+0

votes.item_name = $ date?したがって、たとえばvotes.item_name = TO_DAYS(NOW()) - TO_DAYS(stories.st_date)<= 31の場合は、 – Ilja

+0

okこれはphpmyadmin gonaで動作するようですが、現在はウェブサイトでテストしています)) – Ilja

+0

実際には異なるクエリを使用しています。 TO_DAYS(stories.st_date)<= 7(30など..)同じ結果を返します – Ilja

関連する問題