我有两列,名为GenreID,以及CustomGenre(指的是一本书的类型)。 GenreID是一个整数,它指的是在名为GenreName的colume中的不同表中列出的类型。 CustomGenre允许用户输入他们自己的文本,如果他们不喜欢任何预定义的选项,或者他们想要添加更多信息,如子类。
我希望能够做的是按字母顺序对这些进行排序,并优先选择GenreName。因此,如果该行具有GenreID,则它将按GenreName排序。如果该行没有GenreID(或者它为零),则将CustomGenre视为GenreName,这样我最终得到一个列表,如果我显示“GenreName,CustomGenre”,它实际上按字母顺序排列,即使row没有引用任何GenreName。
如果不清楚,这里有一个小例子:
Genre: GenreID GenreName 1 Sci-Fi 2 Fantasy
Books: Book GenreID CustomGenre Example 1 Futurism A Book 2 Another Book! Horror
我希望那些像这样排序,第二列是alphebetized:
Results: Book GenreName + CustomGenre A Book Fantasy Another Book! Horror Example Sci-fi, Futurism
谢谢!
答案 0 :(得分:0)
试试这个:
SELECT Book,
CONCAT(IFNULL(GenreName,""), IF(GenreName IS NOT NULL, ", ", ""), IF(CustomGenre = "", "", CustomGenre)) As BookGenre
FROM Books LEFT OUTER JOIN Genre
ON Books.GenreID = Genre.GenreID
ORDER BY BookGenre
答案 1 :(得分:0)
您需要使用CONCAT功能。
试试这个:
SELECT
b.Book,
CONCAT( b.CustomGenre, g.GenreName) as the_genre
FROM
Books b
LEFT JOIN Genre g
ON b.GenreID = g.GenreID
ORDER BY
the_genre
答案 2 :(得分:0)
你可以这样试试
SELECT book, TRIM(BOTH ', ' FROM
CONCAT(COALESCE(g.genrename, ''), ', ',
COALESCE(b.customgenre, ''))) genre
FROM book b LEFT JOIN genre g
ON b.genreid = g.genreid
ORDER BY COALESCE(g.genrename, b.customgenre)
输出:
| BOOK | GENRE | |---------------|------------------| | A Book | Fantasy | | Another Book! | Horror | | Example | Sci-Fi, Futurism |
这是 SQLFiddle 演示