1) This is a much simplified example of what I am trying to do for ease of explaining the problem. 2) I will be doing thousands of these queries.
I have a mysql table like so:
NUMBER TEXTCOLOUR
one green
two red
three orange
four pink
I want to display the following (each word having a different textcolour), in this order:
three two one three
I have tried:
$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>
";
}
but this will not display the record 'three' more than once. Also I don't want to have to write the same array twice (once for IN and again for the ORDER BY) as I have to write thousands of these queries.
So the question: How to show mysql records more than once and in a specific order with the least amount of code?
Thanks for any suggestions!
Try
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
Output:
| TEXTCOLOUR |
--------------
| orange |
| red |
| green |
| orange |
You can consider inserting those sequences in some (temp) table with an auto_increment column and a column that designates particular sequence. Then you can just do
SELECT b.textcolour
FROM sequences a JOIN colours b
ON a.number = b.number
WHERE a.seq_no = ?
ORDER BY a.id
Thanks to @peterm for the answer (with extra php added for others' use)
$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))
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.