php 如何运行SQL查询多个 meta键作为列,其值作为行?

bvpmtnay  于 2023-04-04  发布在  PHP
关注(0)|答案(2)|浏览(102)

在phpMyAdmin中,我正在使用WordPress中的自定义 meta字段。
假设我有3个字段的自定义 meta-地址,纬度,经度,并希望运行一个SQL查询,以显示只有这3列与他们的值作为行下面。
我只能弄清楚如何让其中一列显示出来,它的数据通过运行以下命令:

SELECT DISTINCT wp_postmeta.meta_value AS address
FROM wp_postmeta, wp_posts
WHERE post_type = ‘dealers’
AND wp_postmeta.meta_key = ‘_dealer_address’

有人能告诉我如何运行查询以包括所有3列吗?
我想做的是模仿table的设置:http://code.google.com/apis/maps/articles/phpsqlsearch_v3.html#outputxml
因为我有一个自定义的职位类型(经销商)使用您的自定义metabox的纬度和经度。
您的SQL查询在phpMyAdmin中测试得很好,看起来与我的其他手动创建的测试经销商表相同,但当我试图在PHP中替换Google Maps示例查询时-它是一个失败。
你觉得这个问题太复杂了吗?
这是一个不使用WordPress自定义post的测试查询:

$query = sprintf("SELECT address, name, lat, lng, ( 3959 * acos( cos( radians('%s') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < '%s' ORDER BY distance LIMIT 0 , 20",
bf1o4zei

bf1o4zei1#

绝对远离distinct。99%的情况下,这是一个信号,表明有些地方出了问题(模式或您对模式的理解)。
我认为Cheluis的建议可能不会把纬度/经度与地址联系起来。
我没有wordpress的安装,我真的希望有一个主键(比如post_id),在你最初的例子中,你没有用它来连接两个表,这可能是你使用distinct的原因。
如果这个id存在,你可以多次连接回wp_postmeta表,例如:

SELECT meta1.meta_value AS address, meta2.meta_value as latitude, meta3.meta_value as longitude
FROM wp_posts posts, wp_postmeta meta1, wp_postmeta meta2, wp_postmeta meta3
WHERE posts.post_type = ‘dealers’
AND posts.post_id = meta1.post_id
AND meta1.meta_key = ‘_dealer_address’
AND posts.post_id = meta2.post_id
AND meta2.meta_key = ‘_dealer_latitude’
AND posts.post_id = meta3.post_id
AND meta3.meta_key = ‘_dealer_longitude’

这里假设每个庄家都有这三个属性,如果没有的话,你就需要切换到一个外部连接,这会让查询变得更难看。
希望能有所帮助。

k3fezbri

k3fezbri2#

我不熟悉WordPress,我想你可以使用UNION ALL条款。我不知道这是否是最好的解决方案,但我认为它不能工作。类似于:

SELECT DISTINCT wp_postmeta.meta_value AS address, null as latitude, null as longitude
FROM wp_postmeta, wp_posts
WHERE post_type = ‘dealers’
AND wp_postmeta.meta_key = ‘_dealer_address’
Union All

SELECT null as address, distinct(second_value) as latitude, null as longitude
FROM wp_postmeta, wp_posts
WHERE post_type = ‘dealers’
AND wp_postmeta.meta_key = ‘_dealer_latitude’

Union all

SELECT null as address, null as latitude, distinct(third_value) as longitude
FROM wp_postmeta, wp_posts
WHERE post_type = ‘dealers’
AND wp_postmeta.meta_key = ‘_dealer_longitude’

或者类似的东西。每个工会都有正确的价值观。

相关问题