0

他の場所で答えを見つけようとしましたが、成功しませんでした。私を訂正したい人は誰でも、私は基本的な何かが欠けていると確信しています - 私は何を見つけることができません.

「from_Date」と「to_date」を含む11列のテーブル「data」があります。現在表示されている結果は、最も遠い未来の日付から最初に表示されます。結果を最初に最も近い日付 (つまりASC/DESC) として表示する必要があります。

ORDER BYfrom_dateを試みました - 効果なし。私の検索でのサンプルデータ/ページ上の結果フォームコード(参照用)

<form action="webdeals.php" method="post" name="form1" id="form1" style="margin-bottom: 0;">
  <table width="839" border="0">
    <tr valign="top">
      <td width="83">&nbsp;</td>
      <td width="105"><span class="style31">Course Type:</span>
      </td>
      <td width="161">
        <select name="city">
          <option value="">--</option>
          <?php $sql="SELECT * FROM " .$SETTINGS[ "data_table"].
          " GROUP BY city ORDER BY city"; $sql_result=m ysql_query ($sql, $connection ) or die (
          'request "Could not execute SQL query" '.$sql); while ($row=m ysql_fetch_assoc($sql_result)) { echo
          "<option value='".$row[ "city"]. "'
    ".($row[ "city"]==$_REQUEST[ "city"] ? "selected" : ""). ">".$row[
          "city"]. "</option>"; } ?>
        </select>
      </td>
      <td width="100" class="style27"><span class="style31">From:</span>
      </td>
      <td width="108">
        <input name="from" type="text" id="from" size="10" value="
    <?php echo $_REQUEST   [" from "]; ?>" />
      </td>
      <td width="104">
        <img src="images/calendar_icon_pack.png" width="32" height="32" />
      </td>
      <td width="153">
        <div align="center">
          <input type="image" src="http://www.scotsail.co.uk/images/filter_button.png"
          alt="Refine Results" />
        </div>
      </td>
    </tr>
    <tr valign="top">
      <td class="style23">&nbsp;</td>
      <td class="style31">Price Search:</td>
      <td>
        <input type="text" name="string" id="string" value="
    <?php echo stripcslashes($_REQUEST[" string "]); ?>" />
      </td>
      <td>
        <label for="to2" class="style31">To:</label>
      </td>
      <td>
        <input name="to" type="text" id="to" size="10" value="<?php echo $_REQUEST["
        to "]; ?>"/>
      </td>
      <td>
        <img src="images/calendar_icon_pack.png" width="32" height="32" />
      </td>
      <td>
        <div align="center"><a href="webdeals.php">Reset</a>
        </div>
      </td>
    </tr>
  </table>
  <label for="from" class="style2"></label>
</form>

それで:

<?php 

if ($_REQUEST[ "string"]<>'') {
    $search_string = " AND (full_name LIKE '%".mysql_real_escape_string($_REQUEST["string"])."%' OR email LIKE '%".mysql_real_escape_string($_REQUEST["string"])."%')";
}


if ($_REQUEST["city"]<>'') {
    $search_city = " AND city='".mysql_real_escape_string($_REQUEST["city"])."'";
}


if ($_REQUEST["from"]  <>'' and $_REQUEST["to"]    <>'') {
    $sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE from_date
  >= ' ".mysql_real_escape_string($_REQUEST["from"])."' AND to_date
  <='".mysql_real_escape_string     ($_REQUEST["to"])."' ".$search_string.$search_city;
} else
if ($_REQUEST["from "]<>'') {
    $sql = "SELECT * FROM ".$SETTINGS["data_table "]." WHERE from_date>= ' ".mysql_real_escape_string ($_REQUEST["from"])."'".$search_string.$search_city;
} else
if ($_REQUEST["to"]        <>'') {
    $sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE to_date
      <='".mysql_real_escape_string    ($_REQUEST["to"])."' ".$search_string.$search_city;
} else {
    $sql = "SELECT * FROM ".$SETTINGS["data_table "]." WHERE id>0".$search_string.$search_city;
}

$sql_result = mysql_query ($sql, $connection            ) or die ('request "Could not execute SQL query" '.$sql);

if (mysql_num_rows($sql_result)>0)            {
    while ($row = mysql_fetch_assoc($sql_result)) {
        ?>

これが基本的な問題である場合は申し訳ありませんが、髪の毛を引っ張ると機能しません。


更新: @Veger などのコメントに感謝します。

} else { 
    $sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE id>0 ORDER BY from_date ".$search_string.$search_city;
}

確かに、「未精製」の結果が from_date で並べ替えられますが、これにより「city」列/フィールドでの検索が中断され、from_date および to_date を呼び出したときに機能しません。それがどのように見えるべきかについてのアイデアはありますか?

4

1 に答える 1

0

ステートメントの後にを$string_string追加ORDER BYすると、SQL クエリが正しくなくなります。

SELECT * FROM <table> 
  WHERE id>0 
  ORDER BY from_date AND (full_name LIKE '%<fullname>%')

両方を交換する必要があります:

$sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE id>0 ".$search_string.$search_city." ORDER BY from_date";

したがって、クエリは次のようになります。

    SELECT * FROM <table> 
      WHERE id>0 AND (full_name LIKE '%<fullname>%')
      ORDER BY from_date

ORDER BY構文とステートメントの順序の詳細については、 mysqlのORDER BYドキュメントを確認してください。

于 2013-01-13T16:58:52.693 に答える