我有这样的数据库:
例如,用户使用posts.post_id = 1
请求所有posts
数据。现在我想从其他表中获取额外的数据:
posts
表中的一些字段post_id = 1
- 表
postmeta
中post_id = 1
的所有文件 - 表
users
中的一些字段取决于posts.user_id
其中post_id = 1
- 表
files
中与post_id = 1
相关的所有字段 - 表
terms
中的一些字段与post_id = 1
有关系
在 PHP 中,我可以简单地运行 5 个查询来获取此信息,但我想这不是最好的方法,因为 MySQL 能够更快地执行此操作。
更新详情:
-- select from posts
SELECT
posts.post_id,
posts.post_title,
posts.post_name,
posts.post_content,
posts.post_status,
posts.post_type,
posts.post_modified_gmt,
posts.post_date_gmt,
posts.post_mime_type,
posts.user_id
FROM
posts
WHERE
posts.post_id = 1
--select from postmeta
SELECT
postmeta.postmeta_value,
postmeta.postmeta_key,
postmeta.postmeta_id
FROM
postmeta
WHERE
postmeta.post_id = 1
SELECT
files.file_size,
files.file_type,
files.file_name,
files.file_id
FROM
files
INNER JOIN file_relationships ON files.file_id = files.file_id
WHERE
file_relationships.post_id = 1
--select from terms
SELECT
terms.term_id,
terms.term_name,
terms.term_slug,
terms.term_taxonomy,
terms.term_description,
terms.term_group,
terms.term_parent,
terms.term_count
FROM
term_relationships
INNER JOIN terms ON term_relationships.term_id = terms.term_id
WHERE
term_relationships.post_id = 1
--select from users , users.user_id depend on posts.user_id
SELECT
users.user_id,
users.user_name,
users.user_email,
users.user_nicename,
users.user_password,
users.user_displayname,
users.user_role,
users.user_bio
FROM
users
WHERE
users.user_id = 1
这是我运行以使用 PHP 获取信息的查询, database + data
有没有办法只使用 MySQL 来做到这一点?
最佳答案
单个查询并不总是比多个查询更好。在这种情况下,我建议仅组合您的 1 对 1 关系,但对您的多对 1 关系保留单独的查询,因为如果单个帖子有 3 个术语和 2 个文件,加入两个多对 1 关系将产生 6 行。
选择帖子、用户和后元数据
select * from posts p
join postmeta pm on pm.post_id = p.post_id
join users u on u.user_id = p.user_id
where p.post_id = 1
选择文件
select f.* from files f
join file_relationships fr on fr.file_id = f.file_id
join posts p on p.post_id = fr.post_id
where p.post_id = 1
选择术语
select t.* from terms t
join term_relationships tr on tr.term_id = t.term_id
join posts p on p.post_id = tr.post_id
where p.post_id = 1
关于php - MySQL 中的多选结果依赖于其他选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25953303/