У меня проблемы с этим, и я надеюсь, что это возможно.
У меня есть таблица из WordPress, в которой хранятся метаданные записей, поэтому столбцы и данные полей не могут быть изменены (легко).
Структура таблицы, таким образом,
post_id
meta_key
meta_value
мета-ключ хранит имя поля и meta_value, значение для этого поля.
Мне нужно сгруппировать их по идентификатору поста, чтобы я мог сравнить два поля. Я перепробовал все виды!
Таким образом, данные будут выглядеть следующим образом:
post_id meta_key meta_value
1 _wp_field0 10
1 _wp_field1 5
1 _wp_field2 9
1 _wp_field3 "matt's post"
1 _wp_field3 155
2 _wp_field0 51
2 _wp_field1 9
2 _wp_field2 18
2 _wp_field3 "james' post"
2 _wp_field3 199
Я сделал GROUP_CONCAT, который возвращает
post_id concat
1 10,5,9,matt's post,155
2 51,9,18,James' post,199
это самое близкое, что я получил, чтобы получить то, что я хочу. Но я не уверен, как тогда разделить это. У меня есть целая серия целых, которые я хочу сравнить (поля 1 и 2).
Мне нужны второе и третье числа из строки выше. Могу ли я сделать что-то в SQL, чтобы получить это? Затем я хочу сделать кое-что по математике. В основном это поплавки, которые хранят долготу и широту, которые я хочу сравнить и получить расстояние ....
Я думал о временном столе? Все, что мне нужно, это ссылаться на эти два числа.
Может быть, я могу разделить строку по разделителю ??
У меня закончились идеи. (ps) Я также пытался написать свою собственную функцию (как показано ниже), но это несколько раз приводило к краху сервера !!
DROP FUNCTION get_lat;
DELIMITER $$
CREATE FUNCTION get_lat(in_post_id INT)
RETURNS FLOAT
READS SQL DATA
BEGIN
DECLARE latitude FLOAT;
SELECT meta_value INTO latitude FROM wp_postmeta WHERE post_id = in_post_id AND meta_key = 'field1';
RETURN (latitude);
END $$
DELIMITER;
DROP FUNCTION get_lon;
DELIMITER $$
CREATE FUNCTION get_lon(in_post_id INT)
RETURNS FLOAT
READS SQL DATA
BEGIN
DECLARE longitude FLOAT;
SELECT meta_value INTO longitude FROM wp_postmeta WHERE post_id = in_post_id AND meta_key = 'field2';
RETURN (longitude);
END $$
DELIMITER;
SELECT post_id,get_lat(post_id)as latitude, get_lon(post_id) as longitude FROM wp_postmeta GROUP BY post_id;