php - 当我在 mysql 中有同一个用户的两个条目时显示重复数据

标签 php mysql sql duplicates

所以我有两个问题,第一个选择基于 $_SESSION 的数组,然后在第二个选择中使用。

我的问题是,例如,当我有一个使用一个条目时,一切正常,表格将是这样的:

|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]

我的代码是这样的:

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

     }
}

所以我不知道为什么当我有两个条目时它会重复,请帮忙吗?

PS:如果同一用户有 3 个条目,则同一用户有 6 个条目,也有重复。

最佳答案

尝试将 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)更容易出错。请改用 INNER JOIN 语法。

您的第二个查询看起来更像这样:

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

关于php - 当我在 mysql 中有同一个用户的两个条目时显示重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12512996/

相关文章:

php - 我可以在 PHP 中混合使用 MySQL API 吗?

mysql - 组日期为月份

Mysql select 查询同一列的多个条件

mysql - 通过存储过程创建具有动态名称的表

mysql - MySQL中基于今天日期的项目计数

PHP 当 session 超时时,它会重定向整个页面而不是通过 ajax 加载的页面

php - 使用 FastCGI 只能将 PHP 应用程序/框架加载到内存中?

php - MySQL 时间戳是一个日期时间 : shouldn't it be an integer? 我需要通过 URL 传递它

mysql - 执行sql文件时忽略mysql错误信息

php - 如何更改 NOW() 时区