mysql — PHP ORDER BY, DESC, LIMIT

Я надеюсь на некоторую помощь:
Я пытаюсь вывести таблицу данных MySQL, которую пользователи могут просматривать и упорядочивать по различным полям выбора. Я хочу, чтобы данные автоматически располагались в порядке дат (сначала самые новые) и ограничивались 10 результатами на странице.

У меня есть следующая выдержка из сценария (для краткости я обрезал ее, рад выложить больше при необходимости) …

<!-- **** THIS CODE CREATES THE FORM ****-->
<form id="form1" name="form1" method="post" action="deals.php">

<!-- **** THIS CODE IS FOR THE "FROM" DATE ****-->
<label for="from">From</label>
<input name="from" type="text" id="from" size="10" value="<?php echo $_REQUEST["from"]; ?>" />
Results will only show offers that have been listed since this date. Leave blank for all offers.

<!-- **** THIS CODE IS FOR THE "TO" DATE ****-->
</p>
<label for="to">To</label>
<input name="to" type="text" id="to" size="10" value="<?php echo $_REQUEST["to"]; ?>"/>
Results will only show offers that run until this date. Leave blank for all offers.

<label>Country</label>
<select name="country">
<option value="">--Any--</option>
<?php
$sql = "SELECT * FROM ".$SETTINGS["data_table"]." GROUP BY country ORDER BY country";
$sql_result = mysql_query ($sql, $connection ) or die ('request "Could not execute SQL query" '.$sql);
while ($row = mysql_fetch_assoc($sql_result)) {
echo "<option value='".$row["country"]."'".($row["country"]==$_REQUEST["country"] ? " selected" : "").">".$row["country"]."</option>";
}
?>
</select>
Only shows offers from the selected country.

// *****************************************
// ******* ПОВТОРЯЕТСЯ ДЛЯ КАЖДОЙ ПЕРЕМЕННОЙ (Я ДОЛЖЕН УСТАНОВИТЬ ЕГО КАК ДЕЙСТВИТЕЛЬНО, КАК ДЕЙСТВИТЕЛЬНО МЕНЮ ************************** *****
// *****************************************

if ($_REQUEST["from"]<>'' and $_REQUEST["to"]<>'')
{
$sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE from_date >= ' ORDER BY from_date DESC LIMIT 0, 10 ".mysql_real_escape_string($_REQUEST["from"])."' AND to_date <= '".mysql_real_escape_string($_REQUEST["to"])."'".$search_Seller.$search_country.$search_id.$search_Offer.$search_Item.$search_Description.$search_Brand.$search_Was.$search_Now;
}else if ($_REQUEST["from"]<>'')
{$sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE from_date  >= ' ORDER BY from_date DESC LIMIT 0, 10".mysql_real_escape_string($_REQUEST["from"])."'".$search_Seller.$search_country.$search_id.$search_Offer.$search_Item.$search_Description.$search_Brand;
}else if ($_REQUEST["to"]<>'')
{$sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE to_date <= ' ORDER BY date_time DESC LIMIT 0, 10".mysql_real_escape_string($_REQUEST["to"])."'".$search_Seller.$search_country.$search_id.$search_Offer.$search_Item.$search_Description.$search_Brand.$search_Was.$search_Now;}

else {$sql = "SELECT * FROM ".$SETTINGS["data_table"]." ORDER BY from_date DESC LIMIT 0, 10  ".$search_Seller.$search_country.$search_id.$search_Offer.$search_Item.$search_Description.$search_Brand.$search_Was.$search_Now;
}

Это прекрасно работает при выводе исходной таблицы, однако, когда пользователи вводят какие-либо данные, я получаю сообщение об ошибке

"request "Could not execute SQL query" SELECT * FROM newoffers ORDER BY from_date DESC LIMIT 0, 10 AND country='UK'"

Таким образом, я предполагаю, что есть проблема с синтаксисом?
Я попытался перестроить заключительную часть так, чтобы она гласила:

else {$sql = "SELECT * FROM ".$SETTINGS["data_table"].  .$search_Seller.$search_country.$search_id.$search_Offer.$search_Item.$search_Description.$search_Brand.$search_Was.$search_Now; "ORDER BY from_date DESC LIMIT 0, 10";
}

РЕЗУЛЬТАТ: Ошибка разбора: синтаксическая ошибка, неожиданная '"ORDER BY from_date DESC LIMIT' (T_CONSTANT_ENCAPSED_STRING) in /home/iratebjj/public_html/dealstest.php on line 267

Пожалуйста, проверьте http://www.iratebjj.com/dealstest.php чтобы увидеть сценарий в действии.
Если у кого-то есть какие-либо предложения, я очень ценю это!

Спасибо!

Надеюсь, этот пост в порядке. Я думаю, что я следовал всем рекомендациям!

1

Решение

Вот твоя ошибка

$search_Now; "ORDER BY from_date DESC LIMIT 0, 10";

Вы должны объединить "ORDER BY from_date DESC LIMIT 0, 10" после $search_Now и добавить пробел

$search_Now." ORDER BY from_date DESC LIMIT 0, 10"

Вы также должны добавить WHERE 1 = 1 состояние после $SETTINGS["data_table"] так как следующие переменные, кажется, начинаются с AND: $search_Seller, $search_country, $search_id, $search_Offer, $search_Item, $search_De‌​scription, $search_Brand, $search_Was, $search_Now,

Последний else блок должен быть следующим

else {
$sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE 1 = 1 ";
$sql .= $search_Seller.$search_country.$search_id.$search_Offer.$search_Item.$search_Description.$search_Brand.$search_Was.$search_Now." ORDER BY from_date DESC LIMIT 0, 10";
}
0

Другие решения

Ваш запрос формирования неверен. Состояние AND country='UK' должен пойти в WHERE состояние а не после ORDER BY пункт

SELECT *
FROM newoffers
WHERE country='UK'
ORDER BY from_date DESC
LIMIT 0, 10;
0

По вопросам рекламы [email protected]