Mysql 多个表,同一列,使用where
我对这个查询有问题。它返回正确的total_名称、total_事件和total_misc,但其他三个总计(待定名称、事件和misc)是相同的数字,并且完全是错误的数字。这三个表都有一个created_by列。我做错了什么Mysql 多个表,同一列,使用where,mysql,Mysql,我对这个查询有问题。它返回正确的total_名称、total_事件和total_misc,但其他三个总计(待定名称、事件和misc)是相同的数字,并且完全是错误的数字。这三个表都有一个created_by列。我做错了什么 SELECT COUNT(DISTINCT names_revisions.id) AS total_names, COUNT(DISTINCT events_revisions.id) AS total_events, COUNT(DISTINCT m
SELECT
COUNT(DISTINCT names_revisions.id) AS total_names,
COUNT(DISTINCT events_revisions.id) AS total_events,
COUNT(DISTINCT misc_revisions.id) AS total_misc,
SUM(if(names_revisions.status = "Pending", 1, 0)) AS total_pending_names,
SUM(if(events_revisions.status = "Pending", 1, 0)) AS total_pending_events,
SUM(if(misc_revisions.status = "Pending", 1, 0)) AS total_pending_misc
FROM
names_revisions,
events_revisions,
misc_revisions
WHERE
:user_id IN (names_revisions.created_by, events_revisions.created_by, misc_revisions.created_by)
IN()
子句的工作方式与您尝试使用它的方式不同。您需要在三个表之间加入条件,然后在中加入三个=:user\u id
,其中
:
SELECT
COUNT(DISTINCT names_revisions.id) AS total_names,
COUNT(DISTINCT events_revisions.id) AS total_events,
COUNT(DISTINCT misc_revisions.id) AS total_misc,
SUM(if(names_revisions.status = "Pending", 1, 0)) AS total_pending_names,
SUM(if(events_revisions.status = "Pending", 1, 0)) AS total_pending_events,
SUM(if(misc_revisions.status = "Pending", 1, 0)) AS total_pending_misc
FROM
names_revisions,
JOIN events_revisions ON names_revisions.created_by = events_revisions.created
JOIN misc_revisions ON names_revisions.created_by = misc_revisions.created
WHERE
names_revisions.created_by = :user_id
OR events_revisions.created_by = :user_id
OR misc_revisions.created_by = :user_id
IN()
子句的工作方式与您尝试使用它的方式不同。您需要在三个表之间加入条件,然后在中加入三个=:user\u id
,其中
:
SELECT
COUNT(DISTINCT names_revisions.id) AS total_names,
COUNT(DISTINCT events_revisions.id) AS total_events,
COUNT(DISTINCT misc_revisions.id) AS total_misc,
SUM(if(names_revisions.status = "Pending", 1, 0)) AS total_pending_names,
SUM(if(events_revisions.status = "Pending", 1, 0)) AS total_pending_events,
SUM(if(misc_revisions.status = "Pending", 1, 0)) AS total_pending_misc
FROM
names_revisions,
JOIN events_revisions ON names_revisions.created_by = events_revisions.created
JOIN misc_revisions ON names_revisions.created_by = misc_revisions.created
WHERE
names_revisions.created_by = :user_id
OR events_revisions.created_by = :user_id
OR misc_revisions.created_by = :user_id
您将合并表,而不是单独选择计数。对3个表使用单独的查询而不是联接会更快
SELECT
names.total as toal_names,
names.pending as total_pending_names,
misc.total as total_misc,
misc.pending as total_pending_misc,
events.total as total_events,
events.pending as total_pending_events
FROM
(
SELECT
COUNT(names_revisions.id) AS total,
SUM(if(names_revisions.status = "Pending", 1, 0)) AS pending
FROM names_revisions
WHERE names_revisions.created_by = :user_id
) as names,
(
SELECT
COUNT(misc_revisions.id) AS total,
SUM(if(misc_revisions.status = "Pending", 1, 0)) AS pending
FROM misc_revisions
WHERE misc_revisions.created_by = :user_id
) as misc,
(
SELECT
COUNT(events_revisions.id) AS total,
SUM(if(events_revisions.status = "Pending", 1, 0)) AS pending
FROM events_revisions
WHERE events_revisions.created_by = :user_id
) as events
您将合并表,而不是单独选择计数。对3个表使用单独的查询而不是联接会更快
SELECT
names.total as toal_names,
names.pending as total_pending_names,
misc.total as total_misc,
misc.pending as total_pending_misc,
events.total as total_events,
events.pending as total_pending_events
FROM
(
SELECT
COUNT(names_revisions.id) AS total,
SUM(if(names_revisions.status = "Pending", 1, 0)) AS pending
FROM names_revisions
WHERE names_revisions.created_by = :user_id
) as names,
(
SELECT
COUNT(misc_revisions.id) AS total,
SUM(if(misc_revisions.status = "Pending", 1, 0)) AS pending
FROM misc_revisions
WHERE misc_revisions.created_by = :user_id
) as misc,
(
SELECT
COUNT(events_revisions.id) AS total,
SUM(if(events_revisions.status = "Pending", 1, 0)) AS pending
FROM events_revisions
WHERE events_revisions.created_by = :user_id
) as events
我更喜欢这个方法,因为它看起来更干净。