Php 连接多个表的mysql查询
我有4张这样的桌子: 使用者 假期我的问题在这里,有桌子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意味着可以翻译特殊的
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
);