繁体   English   中英

mysql在一条语句中从两个表中选择两列

[英]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_privilegesusername “ 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM