【问题标题】:Mysql get different values from same table in one rowMysql在一行中从同一张表中获取不同的值
【发布时间】:2020-08-04 13:12:42
【问题描述】:

如果标题不清楚,请更正,不幸的是我的英语不完美,我不知道如何用一句话来解释我的问题。

我有一张歌曲表和一位艺术家,这是歌曲表:

|-----------------------------|
| id  | title | artist | date |
|-----------------------------|
| 1   | song1 | 1      | unix |
|-----------------------------|
| 2   | song2 | 1      | unix |
|-----------------------------|
| 3   | song3 | 2      | unix |
|-----------------------------|
| 4   | song4 | 3      | unix |
|-----------------------------|

这是艺术家表

|----------------------|
| id  | name    | date |
|----------------------|
| 1   | artist1 | unix |
|----------------------|
| 2   | artist2 | unix |
|----------------------|
| 3   | artist3 | unix |
|----------------------|

我想获得 10 首随机歌曲和其他 3 首歌曲名称的列表。 我想做一个测验,用户听一首歌并且必须猜出标题,所以我需要 4 个可能的答案,正确的和 3 个磨损的标题。 所以结果一定是这样的:

|-------------------------------------------------------------------------|
| id  | title | artist_id | artist_name | date | wrong1 | wrong2 | wrong3 |
|-------------------------------------------------------------------------|
| 1   | song1 | 1         | artist1     | unix | song2  | song3  | song4  |
|-------------------------------------------------------------------------|

我怎样才能做到这一点? 非常感谢,如果您需要其他信息,请告诉我。

【问题讨论】:

  • 1) 显示的数据和显示的输出不匹配。 2) 这是 MySQL 不支持的 PIVOT - 仿真。
  • 为什么song3song4 在同一行?它们属于不同的艺术家。
  • 错了3首歌怎么选? (我想你的桌子上有超过 4 首歌曲。)
  • @Akina 输出不匹配,因为我也想通过连接检索艺术家姓名...我不能用 mysql 做到这一点? :(
  • @jarlh 是的,歌曲表有超过 4 行????我想随机检索与正确标题不同的错误标题

标签: mysql sql select


【解决方案1】:

我建议您使用两个查询。应该返回正确的歌曲。

|--------------------------------------------------|
| id  | title | artist_id | artist_name | date |   |
|--------------------------------------------------|
| 1   | song1 | 1         | artist1     | unix |   |
|--------------------------------------------------|

另一个可以返回三首随机歌曲

SELECT * FROM table_name
ORDER BY RAND()
LIMIT 3;

|--------------------------------------------------|
| id  | title | artist_id | artist_name | date |   |
|--------------------------------------------------|
| 2   | song2 | 2         | artist2     | unix |   |
| 3   | song3 | 3         | artist3     | unix |   |
| 4   | song4 | 4         | artist4     | unix |   |
|--------------------------------------------------|

然后你可以把这四个记录放在你的代码中。

【讨论】:

  • 我虽然也一样,但如果我想要超过 100 行,这可能需要太多时间...
  • @simonevalentini 我建议在您的代码中使用循环循环遍历 select 语句。我认为这将是最好的解决方案。但是,如果这是您必须做的,请查看此答案。我认为加入两个查询是您所要求的。 stackoverflow.com/a/10538604/10958914
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-05
  • 2021-08-05
相关资源
最近更新 更多