【发布时间】:2011-11-24 12:39:34
【问题描述】:
例如,我的性格匹配数据库有 1000 列,类型标题如:
autoid | movie_genre_comedy | movie_genre_action | movie_genre_horror | more genres -->
23432 | 1 | 0 | 1 | 0
3241 | 0 | 1 | 1 | 0
64323 | 0 | 1 | 0 | 0
如何将每一行与 autoid 23432 的行匹配,以便生成下表:
autoid | movie_genre_comedy | movie_genre_action | movie_genre_horror | more genres -->
23432 | 1 | 0 | 1 | 0
3241 | 0 | 1 | 1 |
请注意,autoid 为 64323 的行不存在,因为它与所选的 autoid 为 23432 的行没有任何相似的列。
最简单的方法是:
SELECT *
from genretable
WHERE movie_genre_comedy = 1
OR movie_genre_horror = 1
OR ........... and so on for up to 1000 parameters.
【问题讨论】:
-
我会说一个有 1000 列的表表明设计不佳。
-
我建议遍历列,如this question。
-
"genre_preferences" 需要是一个单独的表。 “Person_id”+“preference”(喜剧、动作、恐怖等)可能是新表中的行。忽必烈是对的——一张有 1000 列的表格确实设计得很糟糕。改变设计,查询变得简单。
-
Pyjammez:你的数据库有一些设计问题。所有
movie_genre_AAA列应该是值而不是列:Movie(MovieID-PK, other columns), Genre(GenreID-PK,Name={comedy, action, etc.}, ... other columns), MovieGenre(MovieID-FK ,GenreID-FK, PK(MovieID+GenreID))。
标签: mysql