2012-07-18 28 views
0

我有一個新聞表,我想根據它是什麼類型的新聞迴應不同的聲明。該類型存儲在表中名爲「type」的字段中。在mysql_query中使用if語句?

下面是我使用的數據返回到一個數組

$query = mysql_query("SELECT * FROM news"); 
while ($row = mysql_fetch_assoc($result)) { 
} 

因此,在我從桌子「新聞」返回的所有信息的那一刻的基本代碼,但我想呼應出不同語句取決於行內的類型。

該表的目的是根據類型字段顯示用戶提交的具有不同預定義文本的新聞。

舉個例子,我的意思是:如果行中包含類型「release_date」,則回顯出''name'',如果該行包含new_video類型echo''name'視頻「,然後需要按提交日期排序,這也包含在表格中

我不想用單獨的查詢來做這件事,因爲我需要按提交日期安排所有新聞。 這樣做的最好方法是使用if語句嗎?我現在對於想法有點失落,任何建議都會非常感激。希望這是有道理的

+2

如[mysql_query()'](http://php.net/manual/en/function.mysql-query.php)函數的PHP手冊所述:*不推薦使用此擴展名。相反,[MySQLi](http://www.php.net/manual/en/book.mysqli.php)或[PDO_MySQL](http://www.php.net/manual/en/ref.pdo-應該使用mysql.php)擴展名。另請參見[MySQL:選擇API](http://www.php.net/manual/en/mysqlinfo.api.choosing.php)指南和[相關FAQ](http://www.php.net/manual /en/faq.databases.php#faq.databases.mysql.deprecated)以獲取更多信息。* – eggyal 2012-07-18 20:50:00

+0

@eggyal:告訴用戶不要使用mysql_ *函數看起來像一個永無止境的任務! – Jocelyn 2012-07-19 00:37:51

+0

@Jocelyn:所有的任務都是永無止境的,直到死亡。那就是生活。死後來生。所以現在我們告訴使用mysqli_,並且在某些年份我們可能會有所不同。但是說出來並沒有錯。 – hakre 2012-07-19 08:09:16

回答

1

要按日期排序結果,您可以擴展您的查詢像這樣

SELECT * FROM news ORDER BY `submission_date` DESC //or "ASC" for opposite order 

通過使用您的列名稱。爲了處理不同的結果

while ($row = mysql_fetch_assoc($result)) { //for each returned row 
    switch($row['type']){ //your column name for field 
    case 'release_date': 
     echo $row['name']." will be released on"; 
     break; 
    case 'new_video': 
     echo $row['name']." has a new video"; 
     break; 
     //other cases 
    default: //if there should be a process for "anything else"-cases 
     //code 
     break; 
    } 
} 

編輯:

「回聲」 在這一點上不會讓你開心;我想你想在HTML中輸出結​​果;那麼你必須在循環開始之前定義一個變量並將其填充到循環中。就像這樣:

$html = ''; //set variable 
while ($row = mysql_fetch_assoc($result)) { //for each returned row 
    switch($row['type']){ //your column name for field 
    case 'release_date': 
     $html .= "<p>".$row['name']." will be released on</p>"; 
     break; 
    case 'new_video': 
     $html .= "<p>".$row['name']." has a new video</p>"; 
     break; 
     //other cases 
    default: //if there should be a process for "anything else"-cases 
     //code 
     break; 
    } 
} 
echo $html; 
/*$html is now filled with some paragraphs. 
You should echo it inside a complete html-structure 
with doctype and inside the body-tag. 
The position of the echo inside you script depends on the rest of your code. */ 


因爲你將用戶自定義的內容請確保輸入是

  1. escaped
  2. trimmed或開關的情況下可能無法正常工作

而且請不要tice eggyal的評論,我剛剛採取了你的代碼。不要使用mysql_query。

+0

謝謝!我不知道我是如何將循環分配給變量並連接的?我在如何做到這一點上有點失落。 – 2012-07-18 21:45:52

+0

沒問題;我編輯了我的答案。如果在將新聞部分插入到頁面的其他部分時遇到問題,則可能會對此提出新問題,因爲這是另一個上下文。 – 32bitfloat 2012-07-18 21:55:39

0

你可以在你的PHP代碼中做到這一點。如果你想這樣做在SQL查詢中,那麼你可以使用CASE此:

SELECT CONCAT('\'', name, '\' ', 
       CASE type 
       WHEN 'release_date' THEN 'will be released on' 
       WHEN 'new_video' THEN 'has a new video' 
       ELSE 'did something unexpected' 
       END) 
FROM news 
ORDER BY submission_date DESC 

注意的是,使用CONCAT僅僅是一個例子。你仍然可以在PHP中結合文本片段。或者你可以在外部有一個CASE,在THEN的每個條款中有不同的CONCAT表達式。取決於你需要什麼,例如你是否總是想要一個引用的名字。