Php 当mysql中同一用户有两个条目时,重复数据显示
所以我有两个问题,第一个是基于$\u会话选择一个数组,然后在第二个选择中使用 我的问题是,例如,当我有一个使用一个entrie时,一切都正常,表格将如下所示:Php 当mysql中同一用户有两个条目时,重复数据显示,php,mysql,sql,duplicates,Php,Mysql,Sql,Duplicates,所以我有两个问题,第一个是基于$\u会话选择一个数组,然后在第二个选择中使用 我的问题是,例如,当我有一个使用一个entrie时,一切都正常,表格将如下所示: |DATA| USER1| |DATA| USER2| |DATA| USER3| |DATA| USER1| [1] |DATA| USER1| [2] |DATA| USER2| |DATA| USER3| |DATA| USER1| DUPLICATE of FIRST ENTRY USER ABOVE [1] |DATA| US
|DATA| USER1|
|DATA| USER2|
|DATA| USER3|
|DATA| USER1| [1]
|DATA| USER1| [2]
|DATA| USER2|
|DATA| USER3|
|DATA| USER1| DUPLICATE of FIRST ENTRY USER ABOVE [1]
|DATA| USER1| DUPLICATE OF SECOND ENTRY USER ABOVE [2]
SELECT
T.task_id,
T.job_server_id,
T.TIMESTAMP,
TT.task_type_name,
T.STATUS,
UO.username AS customer_name,
UO.user_id AS customer_id,
T.STATUS,
T.quantity,
T.order_id,
U.username,
T.priority,
T.assigned_time,
U.username,
O.order_id
FROM
task_type TT
INNER JOIN task_assignment T
ON T.task_type_id = TT.task_type_id
INNER JOIN orders O
ON O.order_id = T.order_id
INNER JOIN users UO
ON UO.user_id = O.user_id
LEFT JOIN users U
ON T.assigned_to = U.user_id
WHERE
T.STATUS = 'Assigned'
AND T.assigned_to = $ROW[user_id]
AND T.TIMESTAMP <= CURRENT_TIMESTAMP
ORDER BY
T.priority DESC,
DATE(T.TIMESTAMP),
T.quantity DESC,
T.task_id
但是,如果我必须为同一个用户创建条目,我会得到如下副本:
|DATA| USER1|
|DATA| USER2|
|DATA| USER3|
|DATA| USER1| [1]
|DATA| USER1| [2]
|DATA| USER2|
|DATA| USER3|
|DATA| USER1| DUPLICATE of FIRST ENTRY USER ABOVE [1]
|DATA| USER1| DUPLICATE OF SECOND ENTRY USER ABOVE [2]
SELECT
T.task_id,
T.job_server_id,
T.TIMESTAMP,
TT.task_type_name,
T.STATUS,
UO.username AS customer_name,
UO.user_id AS customer_id,
T.STATUS,
T.quantity,
T.order_id,
U.username,
T.priority,
T.assigned_time,
U.username,
O.order_id
FROM
task_type TT
INNER JOIN task_assignment T
ON T.task_type_id = TT.task_type_id
INNER JOIN orders O
ON O.order_id = T.order_id
INNER JOIN users UO
ON UO.user_id = O.user_id
LEFT JOIN users U
ON T.assigned_to = U.user_id
WHERE
T.STATUS = 'Assigned'
AND T.assigned_to = $ROW[user_id]
AND T.TIMESTAMP <= CURRENT_TIMESTAMP
ORDER BY
T.priority DESC,
DATE(T.TIMESTAMP),
T.quantity DESC,
T.task_id
我的代码如下所示:
function make_table($user_id){
first_query with this select `Select U.user_id
from users U, tasks T
where T.assigned_to = U.user_id
and T.status='Assigned'
and U.parent_id = $_SESSION[userid]`;
foreach ($query_result_worker as $row){
$user_id_worker = $row['user_id'];
//second_query with this select
SELECT T.task_id, T.job_server_id, T.TIMESTAMP, TT.task_type_name, T.STATUS,
UO.username AS customer_name, UO.user_id AS customer_id, T.STATUS, T.quantity,
T.order_id, U.username, T.priority, T.assigned_time, U.username, O.order_id
FROM task_type TT, orders O, users UO, task_assignment T
LEFT JOIN users U
ON T.assigned_to = U.user_id
WHERE T.task_type_id = TT.task_type_id
AND O.order_id = T.order_id
AND O.user_id = UO.user_id
AND T.STATUS = 'Assigned'
AND T.assigned_to = $ROW [user_id]
AND T.TIMESTAMP <= CURRENT_TIMESTAMP
ORDER BY T.priority DESC, DATE (T.TIMESTAMP), T.quantity DESC, T.task_id
foreach ($result as $tablerow) {
make the printing table stuff
}
}
函数生成表($user\u id){
使用此select`select U.user\U id的第一个查询
来自用户U,任务T
其中T.assigned_to=U.user_id
和T.status='Assigned'
和U.parent_id=$\U SESSION[userid]`;
foreach($query\u result\u worker作为$row){
$user\u id\u worker=$row['user\u id'];
//使用此select进行第二次查询
选择T.task\u id、T.job\u server\u id、T.TIMESTAMP、TT.task\u type\u name、T.STATUS、,
UO.username作为客户名称,UO.user\u id作为客户id,T.STATUS,T.quantity,
T.订单id、U.用户名、T.优先级、T.分配的时间、U.用户名、O.订单id
来自任务类型TT、订单O、用户UO、任务分配T
左加入用户U
在T.assigned_to=U.user_id上
其中T.task\u type\u id=TT.task\u type\u id
O.order\u id=T.order\u id
和O.user\u id=UO.user\u id
和T.STATUS='Assigned'
和T.assigned_to=$ROW[user_id]
和T.TIMESTAMP尝试将DISTINCT
添加到第一个查询中:
SELECT DISTINCT U.user_id
FROM
users U,
tasks T
WHERE
T.assigned_to = U.user_id
AND T.status='Assigned'
AND U.parent_id = $_SESSION[userid];
另外,我会避免使用隐式连接,尤其是在将它们与显式外部连接混合时。这会使查询更难阅读,并且(IMO)更容易出错。请改用内部连接
语法
您的第二个查询看起来更像这样:
|DATA| USER1|
|DATA| USER2|
|DATA| USER3|
|DATA| USER1| [1]
|DATA| USER1| [2]
|DATA| USER2|
|DATA| USER3|
|DATA| USER1| DUPLICATE of FIRST ENTRY USER ABOVE [1]
|DATA| USER1| DUPLICATE OF SECOND ENTRY USER ABOVE [2]
SELECT
T.task_id,
T.job_server_id,
T.TIMESTAMP,
TT.task_type_name,
T.STATUS,
UO.username AS customer_name,
UO.user_id AS customer_id,
T.STATUS,
T.quantity,
T.order_id,
U.username,
T.priority,
T.assigned_time,
U.username,
O.order_id
FROM
task_type TT
INNER JOIN task_assignment T
ON T.task_type_id = TT.task_type_id
INNER JOIN orders O
ON O.order_id = T.order_id
INNER JOIN users UO
ON UO.user_id = O.user_id
LEFT JOIN users U
ON T.assigned_to = U.user_id
WHERE
T.STATUS = 'Assigned'
AND T.assigned_to = $ROW[user_id]
AND T.TIMESTAMP <= CURRENT_TIMESTAMP
ORDER BY
T.priority DESC,
DATE(T.TIMESTAMP),
T.quantity DESC,
T.task_id
选择
T.task_id,
T.job\u服务器\u id,
时间戳,
TT.task\u type\u name,
T.地位,
UO.username作为客户名称,
UO.user\u id作为客户id,
T.地位,
T.数量,
订单号,
美国用户名,
T.优先权,
T.指定的时间,
美国用户名,
订单号
从…起
任务类型TT
内部联接任务分配
在T.task\u type\u id=TT.task\u type\u id上
内部连接顺序
在O.order\u id=T.order\u id上
内部连接用户
ON.user\u id=O.user\u id
左加入用户U
在T.assigned_to=U.user_id上
哪里
T.STATUS='已分配'
和T.assigned_to=$ROW[user_id]
T.TIMESTAMP+1投票支持你的详细答案,谢谢@Travesty3!