Php 连接多个表的mysql查询

Php 连接多个表的mysql查询,php,mysql,database,Php,Mysql,Database,我有4张这样的桌子: 使用者 假期我的问题在这里,有桌子 id | user_id | from_date | till_date -------------- 3 | 1 | 16-03-2017 | 22-03-2017 4 | 1 | 25-03-2017 | 27-03-2017 猫 tru型 也许你需要知道什么类型和猫 猫 类型 用户类型 说明: 所有表都已连接 我尝试选择在tr_cat和tr_type中可用的用户,该用户具有特殊的cat_id和type_id意味着可以翻译特殊的

我有4张这样的桌子:

使用者

假期我的问题在这里,有桌子

id | user_id | from_date | till_date
--------------
 3 | 1 | 16-03-2017 | 22-03-2017
 4 | 1 | 25-03-2017 | 27-03-2017

tru型

也许你需要知道什么类型和猫

类型

用户类型

说明: 所有表都已连接

我尝试选择在tr_cat和tr_type中可用的用户,该用户具有特殊的cat_id和type_id意味着可以翻译特殊的语言和类型

例如:选择*from users,tr_cat,tr_type,其中tr_type.user_id=users.id,tr_cat.user_id=user.id,tr_cat.id=1,tr_type.id=1

但我也希望user.id不存在于假期列表中,或者如果该行与该user.id一起存在,则日期不在from_DATE和til_DATE之间意味着用户可以工作

最后,我想按user.type和user.active\u工作排序

对于在我的项目中创建查询,我使用from,无论如何,如果您能帮助我理解普通查询:-

这是我的密码:

    $db->where ("(u.type = ? or u.type = ?)", Array(3,4));
    $db->join("vacation v", $today." NOT BETWEEN v.from_date and v.till_date", "LEFT"); 
    // problem here  i don't know how to join this tables
    $db->joinWhere("vacation v", "v.user_id=u.id");// OR User ID Not EXISTS
    $db->join("tr_cat c", "c.user_id=u.id", "LEFT");
    $db->joinWhere("tr_cat c", "c.id", $cat);
    $db->join("tr_type t", "t.user_id=u.id", "LEFT");
    $db->joinWhere("tr_type t", "t.id", $type);
    $tr_list = $db->get ("users u", null, "u.id, u.name, u.type, u.user, u.active_work, u.word_limit, u.max_word_limit");
有人能帮我加入吗

我想得到这样的结果

 id | name | type | user | active_work | word_limit | max_word_limit
 --------------
 3  | test3 | 4 | user3 | 1 | 12 | 22 
 2  | test2 | 4 | user2 | 3 | 12 | 22
 5  | test5 | 3 | user5 | 2 | 12 | 22

请尝试以下查询:

SELECT u.*
FROM users u JOIN tr_cat c ON u.id = c.user_id
JOIN tr_type t ON u.id = t.user_id
WHERE c.cat_id = <some_id> AND t.type_id = <some_id>
AND u.id NOT IN (
 SELECT user_id 
 FROM vacation
 WHERE now() BETWEEN from_date AND to_date
);
id | name
--------------
 1  | English
 2  | Arabic
 3  | Germany
id | name
--------------
 1  | normal
 2  | special
id | name
--------------
 1  | admin
 2  | member
 3  | freelancer
 4  | full time
    $db->where ("(u.type = ? or u.type = ?)", Array(3,4));
    $db->join("vacation v", $today." NOT BETWEEN v.from_date and v.till_date", "LEFT"); 
    // problem here  i don't know how to join this tables
    $db->joinWhere("vacation v", "v.user_id=u.id");// OR User ID Not EXISTS
    $db->join("tr_cat c", "c.user_id=u.id", "LEFT");
    $db->joinWhere("tr_cat c", "c.id", $cat);
    $db->join("tr_type t", "t.user_id=u.id", "LEFT");
    $db->joinWhere("tr_type t", "t.id", $type);
    $tr_list = $db->get ("users u", null, "u.id, u.name, u.type, u.user, u.active_work, u.word_limit, u.max_word_limit");
 id | name | type | user | active_work | word_limit | max_word_limit
 --------------
 3  | test3 | 4 | user3 | 1 | 12 | 22 
 2  | test2 | 4 | user2 | 3 | 12 | 22
 5  | test5 | 3 | user5 | 2 | 12 | 22
SELECT u.*
FROM users u JOIN tr_cat c ON u.id = c.user_id
JOIN tr_type t ON u.id = t.user_id
WHERE c.cat_id = <some_id> AND t.type_id = <some_id>
AND u.id NOT IN (
 SELECT user_id 
 FROM vacation
 WHERE now() BETWEEN from_date AND to_date
);