2015-03-06 5 views
0

я должен сделать MySQL выбрать из базы данных WordPress:Выбрать с неизвестными полями

SELECT wp_posts.ID, wp_posts.post_title AS post_title, 
     responsable.meta_value AS responsable, 
     nif_cliente.meta_value AS nif_cliente, 
     CONCAT_WS(' ',contactos_0_nombre.meta_value,CONCAT('<br><br>',contactos_1_nombre.meta_value)) AS contactos, 
     tipo_de_empresa.meta_value AS tipo_de_empresa, 
     tipo_cliente.meta_value AS tipo_cliente 

     FROM wp_posts 

     LEFT JOIN wp_postmeta AS responsable 
     ON wp_posts.ID = responsable.post_id AND responsable.meta_key='responsable' 

     LEFT JOIN wp_postmeta AS tipo_de_empresa 
     ON wp_posts.ID = tipo_de_empresa.post_id AND tipo_de_empresa.meta_key='tipo_de_empresa' 

     LEFT JOIN wp_postmeta AS nif_cliente 
     ON wp_posts.ID = nif_cliente.post_id AND nif_cliente.meta_key='nif_cliente' 

     LEFT JOIN wp_postmeta AS contactos_0_nombre 
     ON wp_posts.ID = contactos_0_nombre.post_id AND contactos_0_nombre.meta_key='contactos_0_nombre' 

     LEFT JOIN wp_postmeta AS contactos_1_nombre 
     ON wp_posts.ID = contactos_1_nombre.post_id AND contactos_1_nombre.meta_key='contactos_1_nombre' 

     LEFT JOIN wp_postmeta AS tipo_cliente 
     ON wp_posts.ID = tipo_cliente.post_id AND tipo_cliente.meta_key='tipo_cliente' 

     WHERE wp_posts.post_status = 'publish' AND wp_posts.post_type = 'clientes'" 

Я хочу concate contactos_n_nombre. Я могу написать его вручную, но «n» это динамический (я не знаю, сколько он). Это может быть 0, если есть только один контакт, но может быть 1000, если у этого клиента больше контактных методов.

Как я могу сделать это, чтобы найти, сколько contactos есть один клиент, и concate все они

Благодарности

+0

Может» t помочь здесь много, это не реляционный дизайн. – xQbert

+0

Я использую это решение, чтобы сделать его http://stackoverflow.com/questions/26319613/improving-a-query-using-a-lot-of-inner-joins-to-wp-postmeta-a-key-value- table – JavierCabot

+0

да, но в вашем случае вам лучше подумать о http://stackoverflow.com/questions/28773960/sql-inner-join-performance-issues и сравнить, как объединить оба – Alex

ответ

0

Если я правильно понимаю ваш вопрос, вы можете использовать функцию MySQL GROUP_CONCAT. Вы, возможно, потребуется изменить это для вашей ситуации, но основная идея:

Настройка базы данных РЕГИСТРИРУЙТЕСЬ как:

LEFT JOIN wp_postmeta AS contactosdb ON wp_posts.ID = contactosdb.post_id 

Затем используйте следующее в вашем SELECT:

GROUP_CONCAT(contactosdb.meta_value SEPARATOR '<br><br>') AS contactos 
+0

Спасибо @bobdye Я думаю, что GROUP_CAT присоединяются к тем же названиям. Но у меня есть поля с разными именами: contactos_0.meta_value, contactos_1.meta_value, contactos_2.meta_value ..... contactos_N.meta_value, а N - динамический, и я не знаю этого числа. Мне нужно присоединиться ко всем контактам_N.metavalue. еще раз спасибо – JavierCabot

Смежные вопросы