我有这个查询(SQLFiddle):
SELECT
c.name,
a.user_id,
a.status_id,
a.title,
a.rtime,
u.user_name,
s.status_name
FROM company c
LEFT JOIN action a ON a.company_id=c.id
LEFT JOIN user u ON u.id=a.user_id
LEFT JOIN status s ON s.id=a.status_id
WHERE u.user_name='Morgan'
-- WHERE c.name='Fiddle'
GROUP BY c.id
HAVING a.rtime IS NULL OR a.rtime = (
SELECT max(rtime)
FROM action a2
WHERE deleted IS NULL
AND a2.company_id = c.id
)
Run Code Online (Sandbox Code Playgroud)
问题一
我想列出所有公司,并显示他们上次对公司采取行动的用户和状态。同时显示没有采取任何行动的公司。
问题二
我还需要能够按名称搜索用户,从而选择该用户最近进行过活动的所有公司。查询是从表单中生成的,因此我可以注入变量。
我目前无法更改数据库 SCHEMA,但对未来迁移的建议非常有用。
我试过将它绑定在一起,INNER JOIN ( SELECT.. ) t ON但我无法理解它。
我也尝试过这里、 …
我有一个大约 200 MB/1 轧机行的 CSV 文件,每晚都会更新。我需要这个文件中的值在 MySQL 表中可用。
我通过使用LOAD DATA INFILE filepath REPLACE INTO TABLE tablename. 这很快,它保留了我的索引。问题是不再在 csv 中的值不会被删除。
另一个尝试是到TRUNCATE桌子上,然后是LOAD DATA INFILE filepath INSERT INTO TABLE tablename之后。这似乎快了大约 25%。但是通过这样做,我在索引被禁用(?)或停止工作时遇到了很多麻烦。我已经阅读 MySQL 文档和 SO 好几天了,但我无法弄清楚。
我的下一次尝试与第一次类似。我添加了一列“更新”,并update=0在REPLACE INTO使用 a之前将每一行设置为SET update=1,然后使用 删除所有剩余的行update=0。这是我目前的方法。
我的问题是:哪种方法被认为更适合用来自 csv 的信息完全替换表,但保留/刷新索引。我很感激有关该主题的任何建议。
我正在使用 MyISAM 引擎。