[英]mysql selecting two columns from two tables in one statement
我一直在寻找是否已经在SO中得到了解答,但是我找不到任何答案。
我基本上在一个数据库中有两个表。 表member_privileges
1保留用户信誉,表2保留用户详细信息。 他们看起来像这样。
mysql> describe member_privileges;
+---------------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(255) | YES | | NULL | |
| can_comment | int(11) | NO | | NULL | |
| can_create_articles | int(11) | NO | | NULL | |
| can_edit_articles | int(11) | YES | | NULL | |
| can_edit_timeline | int(11) | NO | | NULL | |
| can_remove_comments | int(11) | NO | | NULL | |
| can_upload_profile_images | int(11) | NO | | NULL | |
| can_upload_article_images | int(11) | NO | | NULL | |
| can_approve_new_articles | int(11) | NO | | NULL | |
| can_freez_articles | int(11) | NO | | NULL | |
+---------------------------+--------------+------+-----+---------+----------------+
这是users
表。
mysql> describe users;
+----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(255) | NO | | NULL | |
| password | varchar(255) | NO | | NULL | |
| age | int(11) | NO | | NULL | |
| country | varchar(255) | NO | | NULL | |
| email | varchar(255) | NO | | NULL | |
| link | varchar(255) | NO | | NULL | |
| reg_date | date | YES | | NULL | |
| ip | varchar(255) | YES | | NULL | |
| gender | varchar(10) | YES | | NULL | |
| about | varchar(255) | YES | | NULL | |
| is_activated | int(11) | YES | | NULL | |
| activation_key | varchar(255) | YES | | NULL | |
| image_path | varchar(255) | YES | | NULL | |
+----------------+--------------+------+-----+---------+----------------+
因此,例如在一页中,我试图检查用户'john'
是否设置了can_edit_articles
权限。 因此,如果在member_privileges
, username
“ john”的can_edit_articles
设置为1,则该用户可以进行编辑。
问题是一并检查那些细节。 不同于像我现在那样执行两个查询。
$email = $_SESSION['email'];
$get_user = "SELECT id, username FROM members WHERE email = $email;
$can_user_edit = "SELECT can_edit_articles FROM member_privileges WHERE $email = ?;
因此,如您所见,我正在运行两个查询,并且我想知道是否可以在一个mysql语句中运行那些查询。 ...
使用内部联接并防止SQL语句被SQL注入
如果要选择id,用户名和can_edit_articles值:
"SELECT m.id, m.username, p.can_edit_articles
FROM members m inner join member_privileges p
ON m.username=p.username WHERE m.email = '$email'"
您应该在查询中使用JOIN。 像这样:
SELECT can_edit_articles FROM member_privileges
P LEFT JOIN members M ON P.username = M.username WHERE email = '$email'
$email = $_SESSION['email'];
$can_user_edit = "SELECT can_edit_articles FROM member_privileges
WHERE username = (SELECT username FROM users WHERE email = '$email')";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.