首先,我应该声明我的数据库不再按以下方式设计。 这纯粹是为了允许以前的档案展示。
SELECT t.user, t.team, t.home_games_played, t.home_wins, t.home_draws, t.home_losses, t.home_points, t.home_goals_for, t.home_goals_against,
t.away_games_played, t.away_wins, t.away_draws, t.away_losses, t.away_points, t.away_goals_for, t.away_goals_against, t.vacant, te.team as teamname,
te.colour
FROM tbl_foot_leaguetables t
INNER JOIN tbl_foot_teams te ON t.team = te.team
WHERE league = '44'
ORDER BY t.home_points + t.away_points DESC,(t.home_goals_for + t.away_goals_for) - (t.home_goals_against + t.away_goals_against) DESC,
t.home_goals_for + t.away_goals_for DESC, t.user
此查询会引发以下错误
操作'='的非法混合排序(latin1_swedish_ci,IMPLICIT)和(latin1_general_ci,IMPLICIT)
要查询的以下部分是责备
INNER JOIN tbl_foot_teams te ON t.team = te.team
它想要做的是加入两个相同的词。
例如,'葡萄牙'到'葡萄牙'。
这是糟糕的设计,但我必须这样做才能得到我想要的东西。
现在我的数据库连接了ID等。
任何想法如何解决这个问题?或找工作?
感谢。
答案 0 :(得分:0)
您的表tbl_foot_leaguetables
和tbl_foot_teams
具有不同的排序规则,因此无法直接比较其字符串值。您必须更改一个表的排序规则或使用其他检查。
答案 1 :(得分:0)
整理是错误的。如果你查看phpMyAdmin(我假设你有),你可以看到每个varchar()或其他基于字符串的存储格式的排序规则。
这与字符编码有关。 MySQL将根据该字符集存储数据,如果第一个字符串的编码与其他字符串不同(不同的排序规则),则无法进行二进制比较。这将是对您的查询的主要性能影响,这就是为什么它只是拒绝。
我建议将所有归类值设置为相同(latin1_general_ci
很受欢迎,或者甚至是utf8_general_ci
,这是每个人都应该使用的)。更改排序通常不会影响数据,只会影响数据的存储方式。如果您将所有内容都切换为UTF-8(utf8_general_ci
)