Проблема с таксономиями в WordPress
При работе с таксономиями Wordpress и WooCommerce возникли некоторые проблемы.
По крайней мере, я хочу, чтобы четыре таблицы дали мне правильные данные, которые мне нужны. Мои знания о MYSQL очень просты - после двух дней чтения я не могу понять, как написать правильный запрос!
База данных
woocommerce_attribute_taxonomies
+----------------+------------------+-----------------+
| attribute_id | attribute_name | attribute_label |
+----------------+------------------+-----------------+
| 7 | height | Height |
+----------------+------------------+-----------------+
| 2 | color | Color |
+----------------+------------------+-----------------+
term_taxonomy
+------+------------------+-----------------+
| id | taxonomy | term_id |
+------+------------------+-----------------+
| 36 | pa_color | 30 |
+------+------------------+-----------------+
| 36 | pa_height | 31 |
+------+------------------+-----------------+
terms
+---------+-------------+
| term_id | name |
+---------+-------------+
| 72 | Group 1 |
+---------+-------------+
| 73 | Group 2 |
+---------+-------------+
termmeta
+---------+-----------+-----------------+------------+
| term_id | meta_id | meta_key | meta_value |
+---------+-----------+-----------------+------------+
| 66 | 72 | _wcga_taxonomie | 7 |
+---------+-----------+-----------------+------------+
| 67 | 72 | _wcga_taxonomie | 2 |
+---------+-----------+-----------------+------------+
| 68 | 73 | _wcga_taxonomie | 2 |
+---------+-----------+-----------------+------------+
Мой запрос
Вот так выглядит мой запрос ..
SELECT tm.term_id
, meta_id
, name
, GROUP_CONCAT(attribute_label) AS wc_attr_label
, GROUP_CONCAT(meta_value) AS wc_attr_tax
FROM {$wpdb->prefix}termmeta AS tm
JOIN {$wpdb->prefix}terms AS t
ON t.term_id = tm.term_id
JOIN {$wpdb->prefix}woocommerce_attribute_taxonomies AS wct
ON wct.attribute_id = tm.meta_value
WHERE tm.meta_key = '_wcga_taxonomie'
GROUP
BY t.term_id
Результаты вышеуказанного запроса
Array
(
[grouped_attributes] => Array
(
[0] => stdClass Object
(
[term_id] => 72
[meta_id] => 66
[name] => Gruppe 1
[wc_attr_label] => Height,Color
[wc_attr_tax] => 7,2
)
[1] => stdClass Object
(
[term_id] => 73
[meta_id] => 68
[name] => Gruppe 2
[wc_attr_label] => Color
[wc_attr_tax] => 2
)
)
)
лично мне не нравится способ использования GROUP_CONCAT, он думает, что было бы намного лучше, если бы все значения были доступны легко и чисто, насколько это возможно.
Можно ли установить дополнительные объекты, заключенные в массив внутри [атрибутов], не выполняя еще один запрос?
Что мне нужно?
Array
(
[grouped_attributes] => Array
(
[0] => stdClass Object
(
[term_id] => 72
[meta_id] => 66
[name] => Group 1
[attributes] => Array( Data from woocommerce_attribute_taxonomies )
)
[1] => stdClass Object
(
[term_id] => 73
[meta_id] => 68
[name] => Group 2
[attributes] => Array( Data from woocommerce_attribute_taxonomies )
)
)
)
Если у anybode есть лучшие идеи, как это сделать, я был бы очень признателен!
EDIT
Дополнительная информация
Версия MySQL -> 5.6.38nmm-1log
ONLY_FULL_GROUP_BY не знаю, как это проверить, я читаю atm!
SHOW CREATE TABLE `d02dbcff`.`a335s_termmeta`;
SELECT `meta_id`
, `term_id`
, `meta_key`
, LEFT(`meta_value`, 256)
FROM `d02dbcff`.`a335s_termmeta`
LIMIT 1000;
SHOW CREATE TABLE `d02dbcff`.`a335s_terms`;
SELECT *
FROM `d02dbcff`.`a335s_terms`
LIMIT 1000;
SHOW CREATE TABLE `d02dbcff`.`a335s_term_taxonomy`;
SELECT `term_taxonomy_id`
, `term_id`
, `taxonomy`
, LEFT(`description`,256)
, `parent`
, `count`
FROM `d02dbcff`.`a335s_term_taxonomy`
LIMIT 1000;
SHOW CREATE TABLE `d02dbcff`.`a335s_woocommerce_attribute_taxonomies`;
SELECT *
FROM `d02dbcff`.`a335s_woocommerce_attribute_taxonomies`
LIMIT 1000;
При условии MCVE
http://sqlfiddle.com/#!9/5aa11/5