Как запустить SQL Query для нескольких мета-ключей в виде столбцов и их значений в виде строк? - PullRequest
1 голос
/ 08 апреля 2011

Внутри phpMyAdmin я работаю с пользовательскими метаполями в WordPress.

Допустим, у меня есть пользовательская мета для 3 полей: адрес, широта, долгота, и я хочу выполнить запрос 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 столбца?

Я пытаюсь подражать настройке таблицы следующим образом: http://code.google.com/apis/maps/articles/phpsqlsearch_v3.html#outputxml

Поскольку у меня есть пользовательский тип сообщения (дилеры), использующий ваш пользовательский метабокс для широты и долготы.

Ваш SQL-запрос протестирован в phpMyAdmin очень хорошо и выглядит идентично моей другой таблице тестовых дилеров, созданной вручную, но когда я попытался заменить пример запроса google maps в PHP, это было просто.

Это слишком сложный вопрос, как вы думаете?

Это тестовый запрос, который работает без использования настраиваемой записи WordPress:

$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",

Ответы [ 2 ]

2 голосов
/ 08 апреля 2011

Определенно держаться подальше от отличного.В 99% случаев это признак того, что что-то не так (со схемой или с вашим пониманием схемы).

Я думаю, что предложение Челюса может не связывать широту / долготу с адресом.

У меня нет установки WordPress для игры.Я действительно надеюсь, что есть первичный ключ (скажем, post_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_id = meta1.post_id
AND posts.post_type = ‘dealers’
AND meta1.meta_key = ‘_dealer_address’
AND posts.post_id = meta2.post_id
AND posts.post_type = ‘dealers’
AND meta1.meta_key = ‘_dealer_latitude’
AND posts.post_id = meta3.post_id
AND posts.post_type = ‘dealers’
AND meta1.meta_key = ‘_dealer_longitude’

Предполагается, что у каждого дилера будут все три атрибута.Если нет, вам нужно переключиться на внешнее соединение, что сделает запрос еще более уродливым.

Надеюсь, это поможет.

0 голосов
/ 08 апреля 2011

Я не знаком с 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’

Или как то так. С правильными значениями для каждого объединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...