Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 当mysql中同一用户有两个条目时,重复数据显示_Php_Mysql_Sql_Duplicates - Fatal编程技术网

Php 当mysql中同一用户有两个条目时,重复数据显示

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

所以我有两个问题,第一个是基于$\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| 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!