php - 需要帮助编写返回简单数组的疯狂复杂嵌套 MySQL 查询

标签 php mysql join

我对此感到厌烦 - 我有一个表,其中只有 4 列定义了 3 到 20 位信息的任意位置。除了显示部分数据库和我想要的输出之外,我什至不确定如何描述问题,所以就这样吧。该表有 4 列:meta_id、post_id、meta_key、meta_value。是的,它来自 WP。我需要从(我认为)不同的 post_id 列表开始,其中 meta_key =“location”和 meta_value =“washington”。使用该列表,我想返回一个新的“表”或所有其他数据的数组,其中 post_id = 每个不同的值,meta_key 值是一个新的字段名称,具有相应的 meta_value 作为它的值。我知道这没有多大意义,但这是来 self 的不同列表中的一个 post_id 的相关数据——这可能会帮助您了解我在寻找什么。我从上面提到的 post_id 的 DISTINCT 列表中得到了这个结果的 post_id。

meta_id  |  post_id  |  meta_key  |  meta_value
---------|-----------|------------|-------------------
46922    |  5923     |  adlink    | htp://whatever.com
46923    |  5923     |  subloc    | Menu Page
46924    |  5923     |  size      | Premium
46924    |  5923     |  location  | Washington
46924    |  5923     |  image1    | 5924
46924    |  5923     |  image2    | 5925

现在,关键是:我需要用 meta_value 替换 meta_value where meta_key = "image1"or "image2"和 meta_value where post_id = the meta_value where post_id = 5923 AND meta_key = "image1"or "image2"。该数据来自表格的一部分,如下所示:

meta_id  |  post_id  |  meta_key  |  meta_value
---------|-----------|------------|-------------------
46942    |  5924     |  file      | img1.jpg
46923    |  5925     |  file      | img2.jpg

我喜欢的是这样的:

id   |  adlink            |  sublock  |  size   | location   | image1   | image2
-----|--------------------|-----------|---------|------------|----------|---------
5923 | htp://whatever.com | Menu Page | Premium | Washington | img1.jpg | img2.jpg

这有意义吗?这真的让我很难受 - 非常感谢任何对此复杂查询的帮助!

最佳答案

哈,使用 wordpress 我一直这样做。您基本上想使用多个连接,并使用 column_name 作为 desired_name 来设置列名。这是一个使用 id 5923 的示例:

SELECT meta1.post_id as 'id', 
 meta1.meta_value as 'adlink',
 meta2.meta_value as 'sublock',
 meta3.meta_value as 'size',
 meta4.meta_value as 'location',
 meta5.meta_value as 'image1',
 meta6.meta_value as 'image2' 

FROM wp_postmeta as meta1 

INNER JOIN wp_postmeta as meta2 ON meta1.post_id = meta2.post_id 
INNER JOIN wp_postmeta as meta3 ON meta1.post_id = meta3.post_id 
INNER JOIN wp_postmeta as meta4 ON meta1.post_id = meta4.post_id
INNER JOIN wp_postmeta as meta5 ON meta1.post_id = meta5.post_id
INNER JOIN wp_postmeta as meta6 ON meta1.post_id = meta6.post_id

WHERE 
  meta1.post_id = '5923'  
  AND meta1.meta_key = "adlink"
  AND meta2.meta_key = "sublock"
  AND meta3.meta_key = "size"
  AND meta4.meta_key = "location"
  AND meta5.meta_key = "image1"
  AND meta6.meta_key = "image2" 

这是未经测试的,但你应该明白了。希望对你有帮助

关于php - 需要帮助编写返回简单数组的疯狂复杂嵌套 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21750252/

相关文章:

php - 4 个表之间的关系 Laravel 5.1

php - 通过 Laravel Route 在变量中传递 "\"和 "/"

php - Codeigniter 3 session 不适用于 PHP 7.1.4

php - 传递 html 文件并使用 php 从表中获取值?

mysql - 使 INSERT ... SELECT 语句成为原子的

python - Alembic 检测到更改但使用 --autogenerate 生成空迁移

mysql - 如何使索引良好的 MySQL 表有效地连接

php - 无法使用 PHP mail() 发送电子邮件。您的服务器可能未配置为使用此方法发送邮件

php - 如何使用codeigniter join函数从同一个表获取两个id数据

python - 错误的 str.join 实现行为?