php - MySQL 中的多选结果依赖于其他选择

标签 php mysql sql

我有这样的数据库:

schema

例如,用户使用posts.post_id = 1 请求所有posts 数据。现在我想从其他表中获取额外的数据:

  • posts 表中的一些字段 post_id = 1
  • postmetapost_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/

相关文章:

php - MySQL查询: order by group points by sum of join member points

php - 如何使用php将arraylist插入mysql数据库中的单列

MySQL以不同的方式使用Count

php - HTML表单的字符编码

php - 如何发送包含带有 (+, *,/, -) 等符号的 php 源的发布数据,并使用 ajax 请求将该数据写入文件?

mysql - Docker 故障转移 : Redis, MySQL 和 Nginx

sql - 使用sql删除字符串中的第一个逗号

php - 使用 PHP 和 MySQL 创建动态搜索查询

php - 我是在做梦还是回车会​​阻止 PHP 版本看到代码行?

sql - 用MySQL计算中位数的简单方法