2

1)这是一个非常简化的示例,说明了我为便于解释问题而尝试做的事情。2)我将做数千个这样的查询。

我有一个这样的mysql表:

NUMBER   TEXTCOLOUR
one      green
two      red
three    orange
four     pink

我想按以下顺序显示以下内容(每个单词都有不同的文本颜色):

三 二 一 三

我试过了:

$query = "SELECT * FROM `table` WHERE `number` IN ('three', 'two', 'one','three') 
ORDER BY FIND_IN_SET(number, 'three,two,one,three')";

$result = mysql_query($query);
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
echo "
<div class='" .$textcolour. "'>$number</div>
";
}   

但这不会多次显示记录“三”。此外,我不想写两次相同的数组(一次用于 IN,一次用于 ORDER BY),因为我必须编写数千个这样的查询。

那么问题来了:如何以最少代码以特定的顺序多次显示mysql记录?

感谢您的任何建议!

4

2 回答 2

1

尝试

SELECT b.textcolour
  FROM 
(SELECT 'three' number UNION ALL 
 SELECT 'two' UNION ALL 
 SELECT 'one' UNION ALL 
 SELECT 'three') a LEFT JOIN table1 b ON a.number = b.number

输出:

| TEXTCOLOUR |
--------------
|     orange |
|        red |
|      green |
|     orange |

SQLFiddle

您可以考虑将这些序列插入到一些(临时)表中,其中包含一个 auto_increment 列和一个指定特定序列的列。然后你可以做

SELECT b.textcolour
  FROM sequences a JOIN colours b
    ON a.number = b.number
 WHERE a.seq_no = ?
 ORDER BY a.id

SQLFiddle

于 2013-05-18T06:47:28.873 回答
0

感谢@peterm 的回答(添加了额外的 php 供其他人使用)

$result = mysql_query("SELECT b.textcolour FROM (
SELECT 'three' number UNION ALL 
SELECT 'two' UNION ALL 
SELECT 'one' UNION ALL 
SELECT 'three'
) a LEFT JOIN table1 b ON a.number = b.number"); 

while ($row = mysql_fetch_object($result))
于 2013-05-18T16:26:45.010 回答