我试图检查是否已经选择了用户名。在显示查询之前,这是我的表结构:
用户
<% videodata.categories.forEach(function(item) { %>
<li><%= item.categoryName %></li>
<% }) %>
USERS_SETTINGS
ID | data
5 0
6 1
如何在表ID | Username
5 Dillinger
6 John
中查看我系统中所有可用用户的列表以及user
表格中我的每个用户的设置{ {1}}表。现在,如果正在系统中注册的客户选择了用户名users_settings
,则会显示错误消息,因为用户已选择了用户名,而如果客户选择了John,则系统不会显示任何错误&#39;因为已有注册用户使用了用户名但已被删除 user
。
我尝试了什么:
Dillinger
但当我data: 1
时,我得到了:
您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以获得正确的语法,以便在第2行使用neare&#39; d u.id = d.id&#39;
到底出了什么问题?
答案 0 :(得分:1)
这解决了语法问题:
select count(*)
from user u join
user_settings us
on u.id = us.id -- I am guessing about the right column name here
where u.username = @usernamep and us.data = @datap;
然而,这比它可能需要的更昂贵。更便宜的方法使用exists
而不是count()
:
select 1
from user u
where u.username = @usernamep and
exists (select 1
from user_settings us
where u.id = us.id and us.data = @datap
)
limit 1;
如果用户返回任何行,则该用户已存在。为获得最佳性能,您需要user(username)
和user_settings(user_id, data)
上的索引。
答案 1 :(得分:0)
您似乎将两个不同的别名(或拼写错误)分配给无效的表格,并且应该更改为:
query = "SELECT Count(username)
FROM users_settings u INNER JOIN user d
ON u.id = d.id
WHERE u.username = @usernamep
AND d.data = @datap"
答案 2 :(得分:0)
试试这个
query = "SELECT Count(username) from users_settings u
INNER JOIN user d ON
u.id = d.id
WHERE u.username = @usernamep AND
d.data = @datap"