2011-12-22 1 views
2

Я пытаюсь сортировать статьи по «Сегодня», «На этой неделе», «В этом месяце», «Все время». Дело в том, что мой запрос суммирует голоса из одной таблицы и получает статьи из другой таблицы, это делает запрос очень сложным для меня, и я не уверен, что я делаю это правильно.PhP order by today, week, month ... Не работает

Во всяком случае, у меня есть страница, как 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 на экран и посмотрите, что это за значение. затем попробуйте запустить это в phpmyadmin и посмотреть, является ли это проблемой php или sql. – ChelseaStats

+0

также вы действительно хотите сравнить item_name (varchar) с id (int) ?? – ChelseaStats

+0

ну, правильная дата верна, я повторил ее во всех случаях – Ilja

ответ

1

попробовать

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 

или подобное, подумайте о том, что вы хотите достичь, и логика затем переписать ваш запрос в phpmyadmin, пока вы не получите правильный выход, прежде чем вводить его в php.

+0

vote.item_name = $ date? Так, например, где vote.item_name = TO_DAYS (NOW()) - TO_DAYS (stories.st_date) <= 31? – Ilja

+0

ОК, похоже, это работает в phpmyadmin gona, проверяйте его на веб-сайте сейчас)) – Ilja

+0

Фактически, когда я использую разные запросы, например. TO_DAYS (stories.st_date) <= 7 (30 и т. Д.). Он возвращает те же результаты – Ilja