SQL 查询 - 根据条件显示常用行
SQL Query - displaying common rows based on conditions
我有两个 table,即 TABLE1 和 TABLE2
我无法理解如何根据一些条件从这两个 table 中提取信息。这基本上是我需要的:
我想根据列值从第一个 TABLE1 中获取某些行。 TABLE1中有一列名为timecreated。我想显示 TABLE1 中最近 30 天创建的所有行(时间是 UNIX 时间戳)只有当满足以下条件:
- COLUMN1='\core\event\course_viewed' OR
- COLUMN2='\core\event\enrol_instance_created' OR
- 第 3 列='restore'
现在 TABLE2 的列名称为:ID、全名和简称。我也需要展示这些
ID 列在 TABLE2 中的值与在 TABLE1 中名为 courseid 的列。我想用 fullname 和 shortname[=74= 显示这些行] 对应于 courseid 被命名为 ID TABLE1.
我尝试了什么?我尝试了以下但似乎不起作用
SELECT TABLE1.*, TABLE2.* FROM TABLE1, TABLE2
WHERE
(
TABLE1.COLUMN1 = '\core\event\course_viewed'
OR
TABLE1.COLUMN2 = '\core\event\enrol_instance_created'
OR
TABLE1.COLUMN3 = 'restore'
)
AND
TABLE2.COLUMN1 = TABLE1.COLUMN4
样本 Table 1
样本Table 2
期望的结果 table
两项改进将使您的查询正常工作。
- 当搜索
\
时,你必须转义它,即如果你想搜索 app\user
,请将 app\user
放在 where 子句中。
- 如果
courseid
始终存在于 table1
中,则使用 INNER JOIN
否则 LEFT JOIN
,这消除了我们主要在表 1 上工作的想法。
话虽如此,以下内容应该适用于您的情况。
SELECT TABLE1.*, TABLE2.*
FROM TABLE1
INNER JOIN TABLE2 ON TABLE2.id = TABLE1.courseid
WHERE TABLE1.timecreated >= UNIX_TIMESTAMP(NOW() - INTERVAL 30 DAY)
AND (
TABLE1.COLUMN1 = '\core\event\course_viewed'
OR TABLE1.COLUMN2 = '\core\event\enrol_instance_created'
OR TABLE1.COLUMN3 = 'restore'
)
我有两个 table,即 TABLE1 和 TABLE2 我无法理解如何根据一些条件从这两个 table 中提取信息。这基本上是我需要的:
我想根据列值从第一个 TABLE1 中获取某些行。 TABLE1中有一列名为timecreated。我想显示 TABLE1 中最近 30 天创建的所有行(时间是 UNIX 时间戳)只有当满足以下条件:
- COLUMN1='\core\event\course_viewed' OR
- COLUMN2='\core\event\enrol_instance_created' OR
- 第 3 列='restore'
现在 TABLE2 的列名称为:ID、全名和简称。我也需要展示这些 ID 列在 TABLE2 中的值与在 TABLE1 中名为 courseid 的列。我想用 fullname 和 shortname[=74= 显示这些行] 对应于 courseid 被命名为 ID TABLE1.
我尝试了什么?我尝试了以下但似乎不起作用
SELECT TABLE1.*, TABLE2.* FROM TABLE1, TABLE2
WHERE
(
TABLE1.COLUMN1 = '\core\event\course_viewed'
OR
TABLE1.COLUMN2 = '\core\event\enrol_instance_created'
OR
TABLE1.COLUMN3 = 'restore'
)
AND
TABLE2.COLUMN1 = TABLE1.COLUMN4
样本Table 2
两项改进将使您的查询正常工作。
- 当搜索
\
时,你必须转义它,即如果你想搜索app\user
,请将app\user
放在 where 子句中。 - 如果
courseid
始终存在于table1
中,则使用INNER JOIN
否则LEFT JOIN
,这消除了我们主要在表 1 上工作的想法。
话虽如此,以下内容应该适用于您的情况。
SELECT TABLE1.*, TABLE2.*
FROM TABLE1
INNER JOIN TABLE2 ON TABLE2.id = TABLE1.courseid
WHERE TABLE1.timecreated >= UNIX_TIMESTAMP(NOW() - INTERVAL 30 DAY)
AND (
TABLE1.COLUMN1 = '\core\event\course_viewed'
OR TABLE1.COLUMN2 = '\core\event\enrol_instance_created'
OR TABLE1.COLUMN3 = 'restore'
)