2016-02-13 88 views
0

這是我的PHP文件的片段,該數據庫是庫MySQLi:MYSQL命令通過如何使用其他名稱作爲列?

$order = $_GET["order"]; 

mysqli_query($connect,"SELECT * FROM table WHERE activ = '1' ORDER BY $order LIMIT $start, $end); 

現在,如果我想作爲排序依據最新的,我的網址應該是這樣的:

mysite.com/index .php?order = date DESC

但這看起來不太好。

如何使用date DESC的其他名稱,例如'newest'?

mysite.com/index.php?order=newest

預先感謝您!

此致敬禮。

+0

請提供你發佈這些命令的環境是什麼,這個PHP是什麼?另外,提供有關$ start和$ end變量的信息。 –

+0

嘿,是的,它的PHP和MYSQLi,$ start和$ end只是我的頁面導航 –

回答

-1

查詢字符串需要包含在""中。

您提供的代碼段是否工作?有些事情要檢查,如果它不:

1)確保您的$connect信息是正確的。

2)確保table是您的表的名稱。

3)確保activ是您的表中的一列。存儲在那裏的值是布爾型數據類型。

4)確保date是您的表格中的一列,並且您使用的日期類型已正確存儲在表格中。

5)注意LIMIT期待的多項記錄參數返回一些偏移,根據您使用LIMIT不當使用的是$start$end,我假設變量名。更合適的是$number_of_records$offset

6)檢查錯誤日誌以查看數據庫服務器或域服務器本身是否記錄了錯誤。

現在,如果該查詢工作...

馬特·克拉克處理問題的其餘約ASCDESC下面,見here。但顯然,您不能僅僅粘貼ASCDESC,而沒有指定要排序的鍵,例如列date。因此,查詢字符串應該是這樣的:

"SELECT * FROM table WHERE activ = '1' ORDER BY date $order LIMIT $start, $end" 

另一種選擇,如果你的查詢變得更加複雜,並且不僅關係到按日期排序,那麼你可能會採取提供多個變量與您的網址。

mysite.com/index.php?sortby=date &爲了=最新

"SELECT * FROM table WHERE activ = '1' ORDER BY $sortby $order LIMIT $start, $end" 

您可以瞭解更多關於這個帖子的網址多個變量:Passing multiple variables to another page in url和其他類似。

+0

@Matt Clark Ha。看起來我遲到了,很好的答案Mark Clark。 –

1
$order = $_GET["order"]; 
if ($order == "newest") 
{ 
    $order = "DESC"; 
} 
else 
{ 
    $order = "ASC"; 
} 

這將重新分配取決於它的初始值的順序值。

這也會給你一個默認值ASC對於任何排序順序,不完全匹配newest

請注意,如果您最終做了其他事情,您的發佈代碼非常容易出現SQL注入; you should be sure to sanitize all your strings

+0

嘿,謝謝它的作品:)。這也可以以不同的方式完成嗎?是的,我確定我會爲所有的字符串使用mysqli真正的轉義字符串。 –

+0

查看給出的答案[here](http://stackoverflow.com/a/60496/1790644)。 –

+0

一定要upvote和接受,如果我已經幫助:)乾杯,並快樂的編碼。 –

0

我覺得這裏有讓你的數據庫的信息, 的兩種方式,但我不得不澄清你的一些參數:

1)。您從$_GET['order']獲得的價值必須是ascdesc。 2)。是你的查詢是錯誤的,你的訂單後必須有一個列名。 它應該看起來像這樣order by column_name $order。 3)。你可能會拼錯你的activactive。無論如何,我在下面的查詢中追蹤您的專欄名稱。 4)。我不明白$end的目的是什麼。 5)。 無論如何,這是獲取數據庫中信息的簡單方法。

  1. 如果每次用戶必須向表中插入/添加一些數據,您可以簡單地按ID排序。 $ query = mysqli_query($ connnect,「select * from table where activ ='1'order by id $ order limit by $ start」);

  2. 正如您所獲得的信息以上。我假設你正在收到訂單日期。所以,如果條件真的在日期中,你的查詢應該看起來像這樣。注意:如果日期或日期或內容是日期或日期,我會寫日期小寫,以便在日期列名中注意。 $ query = mysqli_query($ connect,「select * from table where activ ='1'order by date $ order limit $ start」);

我只是想幫忙。對不起,不要阻止我。