如何以特定顺序多次显示mysql记录
Posted
技术标签:
【中文标题】如何以特定顺序多次显示mysql记录【英文标题】:How to show mysql records more than once and in a specific order 【发布时间】:2013-05-18 06:30:50 【问题描述】: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记录? p>
感谢您的任何建议!
【问题讨论】:
SELECT
永远不会多次返回同一行,除非您使用 UNION ALL
从多个查询中收集结果。
初始序列,three
,two
,one
,three
,你数据库里也有吗?
谢谢大家。 @Mogul,没有其他数据库,只是上面提到的表。
【参考方案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
【讨论】:
+1 有点骇人听闻,但确实有效,而且应该也超级快。 第一个建议非常有效,非常感谢!对于其他人的参考,这里也是 php,我花了一段时间才弄清楚我必须使用 mysql_fetch_object:$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))
我会记住临时表。再次感谢@peterm【参考方案2】:
感谢@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))
【讨论】:
以上是关于如何以特定顺序多次显示mysql记录的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 JDBC/Java 访问和显示 MySQL 关系数据库中的特定记录?