1

I would like to be able to have my result set sorted by field id, and then filter out duplicate values on column name.

Given a table

+----+------+-------+
| id | name | other |
+----+------+-------+
|  1 |    a |     1 |
|  2 |    a |     0 |
|  3 |    b |     0 |
|  4 |    c |     0 |
+----+------+-------+

My sorting will be the following: 2, 4, 1, 3. Consequently, I desire the result to look like:

+----+------+-------+
| id | name | other |
+----+------+-------+
|  2 |    a |     0 |
|  4 |    c |     0 |
|  3 |    b |     0 |
+----+------+-------+

After all, in the sorted result set, the row with id = 2 appears before the row with id = 1, while they share a name. In such case, only the first name should be preserved.

In short:

SELECT *
FROM table
ORDER BY FIELD(id, 2, 4, 1, 3)
GROUP BY name

Unfortunately, it appears MySQL chooses which of the rows that turned out to contain a non-unique name it returns, regardless of the ordering done.

I have read this solution, but it only covers ordering by DESC (and indirectly ASC), but not by FIELD.

What would be the way to return only the first row in case of duplicates for a certain column while taking into account the sorting algorithm?

Community
  • 1
  • 1
user2180613
  • 739
  • 6
  • 21
  • `I desire the result to look like` - you can use `DISTINCT` keyword, if I understood correctly. – Ivan Jan 12 '15 at 17:28
  • @Ivan No there can be other columns with values that are not the same per se and which are allowed to be different – user2180613 Jan 12 '15 at 17:28

0 Answers0