0

我有一个新闻表,我想根据新闻的类型来回应不同的声明。类型存储在表中名为“type”的字段中。

这是我用来将数据返回到数组的基本代码

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

所以目前我正在返回表“新闻”中的所有信息,但我想根据行中的类型回显不同的语句。

该表的目的是根据类型字段显示具有不同预定义文本的用户提交的新闻。

举个例子来说明我的意思:如果行包含类型“release_date”,则回显“名称”将在“上发布”。如果行包含 new_video 的类型,则回显“'名称'有一个新视频”。它然后还需要在表格中包含的提交日期之前订购。

我不想通过单独的查询来执行此操作,因为我需要按提交日期安排所有新闻。最好的方法是使用 if 语句吗?我现在有点迷失了想法,任何建议都会非常感激。希望这是有道理的

4

2 回答 2

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. 逃脱
  2. 修剪或开关盒可能无法工作

请注意 eggyal 的评论,我刚刚拿走了你的代码。不要使用 mysql_query。

于 2012-07-18T21:18:40.370 回答
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在外面有一个,在每个子句中都有不同CONCAT的表达方式。THEN取决于您到底需要什么,例如您是否总是想要一个带引号的名称。

于 2012-07-18T21:36:41.943 回答