1)这是我为了便于解释问题而尝试做的简化示例。 2)我将进行数以千计的查询。
我有一个像这样的mysql表:
NUMBER TEXTCOLOUR
one green
two red
three orange
four pink
我想按以下顺序显示以下内容(每个单词具有不同的textcolour):
三二一三
我试过了:
$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记录不止一次?
感谢您的任何建议!
答案 0 :(得分: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列和指定特定序列的列在某些(temp)表中插入这些序列。那你就可以做到
SELECT b.textcolour
FROM sequences a JOIN colours b
ON a.number = b.number
WHERE a.seq_no = ?
ORDER BY a.id
<强> SQLFIddle 强>
答案 1 :(得分: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))