Выбор нескольких значений из одного столбца и присвоение им имен

*РЕШЕНИЕ

Несколько выборок на одной и той же таблице


Я не могу понять, как сделать это правильно. Я хочу запросить таблицу для нескольких ключей в одном столбце и вернуть их с именами

id | meta_key | meta_value |
1  | KEY1     | KEY1_VALUE |
2  | KEY2     | KEY2_VALUE |
3  | KEY3     | KEY3_VALUE |
etc.

$tq="SELECT metas.meta_value

FROM meta_table AS metas

LEFT JOIN post_table AS posts
ON metas.post_id = posts.ID

WHERE metas.meta_key    IN  ('KEY1', 'KEY2', 'KEY3')
AND posts.post_status   =   'status'
AND posts.post_type     =   'type'";
$tr=$dbc->query($tq);
var_dump($tr);

Сам запрос работает нормально. Но мне нужно назвать «KEY1», «KEY2», «KEY3» и т. Д. В возвращаемом массиве. Теперь все возвращается в «[meta_value] => string», мне нужно, чтобы оно было «[key1] => string», «[key2] => string», «[key3] => string» и т. Д.

*РЕДАКТИРОВАТЬ
Там швы, чтобы быть некоторые основные недоразумения относительно того, что я спрашиваю. Поэтому я постараюсь уточнить. Мне нужен возвращенный массив, чтобы сказать, что KEY1 имеет ключ KEY1 со значением, соответствующим KEY1 в meta_value и т. Д., Т.е.

array({[
[KEY1] => [KEY1_VALUE],
[KEY2] => [KEY2_VALUE]
]});

сейчас это выглядит так

array({[
[meta_value] => [VALUE1],
[meta_value] => [VALUE2]
]});

Так что проблема в том, что я не могу указывать конкретные значения в foreach, потому что все имеет ключ [meta_value].

-2

Решение

Вот вопрос, который отвечает именно то, что я искал.

Несколько выборок на одной и той же таблице

Я считаю, что, возможно, слишком усложнил свой вопрос или просто не смог правильно объяснить, чего я пытался достичь. В любом случае, спасибо за все ваши ответы!

1

Другие решения

MySQL позволяет вам назвать значение, используя AS ключевое слово

SELECT id AS Key1, meta_key AS Key2, meta_value AS Key3
FROM ...
0

Попробуйте это и замените его в соответствии с вашими потребностями.

$tr=$dbc->query($tq);
// try this piece of code
$data['records'] = $tr->result();
$key = 0;
foreach($records as $r)
{
$meta_array = array('key'.$key => '$r');
$key++;
}
0

Если я неправильно понимаю, пожалуйста, дайте больше разъяснений …

$tq="SELECT metas.meta_key,metas.meta_value ...

Вернусь:

[0][meta_key]='KEY1'
[0][meta_value]='KEY1_VALUE'
[1][meta_key]='KEY2'
[1][meta_value]='KEY2_VALUE'
[2][meta_key]='KEY3'
[2][meta_value]='KEY3_VALUE'

Вы можете просто соединить значения в каждой строке вместе, когда пришло время их отображать / обрабатывать, верно?

0

Пара вещей:

  1. Использование предложения where с левым соединением со значениями справа от левого соединения приводит к тому, что левое соединение действует как внутреннее соединение. Если вы хотите внутреннее соединение, скажем, внутреннее соединение, если вы хотите левое соединение, переместите критерии where в соединение.
  2. Если мы предположим, что каждый meta_key уникален для таблицы (или для сообщения в таблице) … тогда выбор максимального значения для каждого ключа объединит нули в одну строку. и group by объединяет правильные строки и позволяет max возвращать 1 значение.

Если мы можем предположить, что каждый мета-ключ уникален (или, по крайней мере, уникален для post_ID)

SELECT
metas.post_ID,
max(CASE WHEN metas.meta_key = 'KEY1' then metas.meta_value end) as Key1,
max(CASE WHEN metas.meta_key = 'KEY2' then metas.meta_value end) as Key2,
max(CASE WHEN metas.meta_key = 'KEY3' then metas.meta_value end) as Key3,
FROM meta_table AS metas
LEFT JOIN post_table AS posts
ON metas.post_id = posts.ID
AND posts.post_status = 'status'
AND posts.post_type = 'type'
WHERE metas.meta_key IN ('KEY1', 'KEY2', 'KEY3')
GROUP BY metas.post_ID
0

Другой подход, который рекомендуется для пользователей WooCommerce, состоит в том, чтобы объединить ваши данные в представлении и затем запросить представление.

Я вхожу в детали в этот ответ на другой пост SO, но базовую структуру можно увидеть в SQL ниже

CREATE VIEW WP_TRANSACTIONS AS
SELECT WP_POSTMETA.Post_ID AS Post_ID, WP_POSTMETA.CustomerLN AS CustomerLN, [table_name2].CustomerFN AS  CustomerFN, [table_name3].Payment_Type AS Payment_Type, [table_name4].Meta_Value AS  Invoice_Total
FROM WP_POSTMETA
JOIN WP_POSTMETA AS [table_name2] ON WP_POSTMETA.Post_ID = [table_name2].Post_ID
JOIN WP_POSTMETA AS [table_name3] ON WP_POSTMETA.Post_ID = [table_name3].Post_ID
JOIN WP_POSTMETA AS [table_name4] ON WP_POSTMETA.Post_ID = [table_name4].Post_ID
WHERE WP_POSTMETA.Meta_Value =  "CustomerLN"AND [table_name2].Meta_Value =  "CustomerFN"AND [table_name3].Meta_Value =  "Payment_Type"AND [table_name4].Meta_Value =  "Invoice_Total"

WHERE пункт гарантирует, что у вас будет одна строка на POST ID с каждым meta_value Вы хотите, как отдельный столбец, соответствующий каждому meta_key, В этом примере я использую 4 ключа (см. Данные WP_POSTMETA ниже). Чтобы достичь этого, нужно JOIN стол с собой x-1 раз (где x количество различных ключей, которые будут собраны).

--------------------------------------------------------------------------
ID POST_ID META_KEY META_VALUE
-------------------------------------------------- ------------------------
0001 0001 CustomerLN Test
0002 0001 CustomerFN Tester
0003 0001 Payment_Type PayPal
0004 0001 Счет-фактура $ 200
0005 0002 CustomerLN Doe
0006 0002 ЗаказчикFN Джон
0007 0002 Payment_Type CC-Mastercard
0008 0002 Счет-фактура $ 1000
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector