Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Consultar multiples registros de la tabla wp_usermeta para cada usuario en wp_users

Estas en el tema de Consultar multiples registros de la tabla wp_usermeta para cada usuario en wp_users en el foro de Mysql en Foros del Web. Hola, estoy generando una consulta SQL para obtener los datos de cada usuario de wordpress (tabla wp_user), los datos como fecha nacimiento, telefono, celular, etc. ...
  #1 (permalink)  
Antiguo 02/08/2016, 10:56
Avatar de hmvr414  
Fecha de Ingreso: marzo-2011
Ubicación: Santiago de Cali, Colombia
Mensajes: 74
Antigüedad: 13 años, 1 mes
Puntos: 16
Consultar multiples registros de la tabla wp_usermeta para cada usuario en wp_users

Hola,

estoy generando una consulta SQL para obtener los datos de cada usuario de wordpress (tabla wp_user), los datos como fecha nacimiento, telefono, celular, etc. se almacenan en wp_usermeta, la consulta actual es:

Código SQL:
Ver original
  1. SELECT u.*, nombre.meta_value nombre, apellido.meta_value apellido, cedula.meta_value cedula, fijo.meta_value fijo, celular.meta_value celular, fecha_nacimiento.meta_value fecha_nacimiento, sexo.meta_value sexo, departamento.meta_value departamento, ciudad.meta_value ciudad  FROM `wp_users` u
  2. LEFT JOIN (SELECT user_id, meta_value FROM `wp_usermeta`  WHERE `meta_key` = 'pie_text_4') nombre ON nombre.user_id = u.id
  3. LEFT JOIN (SELECT user_id, meta_value FROM `wp_usermeta`  WHERE `meta_key` = 'pie_text_3') apellido ON apellido.user_id = u.id
  4. LEFT JOIN (SELECT user_id, meta_value FROM `wp_usermeta`  WHERE `meta_key` = 'pie_text_7') cedula  ON cedula.user_id = u.id
  5. LEFT JOIN (SELECT user_id, meta_value FROM `wp_usermeta`  WHERE `meta_key` = 'pie_text_5') fijo  ON fijo.user_id = u.id
  6. LEFT JOIN (SELECT user_id, meta_value FROM `wp_usermeta`  WHERE `meta_key` = 'pie_text_6') celular  ON celular.user_id = u.id
  7. LEFT JOIN (SELECT user_id, meta_value FROM `wp_usermeta`  WHERE `meta_key` = 'pie_date_9') fecha_nacimiento  ON fecha_nacimiento.user_id = u.id
  8. LEFT JOIN (SELECT user_id, meta_value FROM `wp_usermeta`  WHERE `meta_key` = 'pie_dropdown_13') sexo  ON sexo.user_id = u.id
  9. LEFT JOIN (SELECT user_id, meta_value FROM `wp_usermeta`  WHERE `meta_key` = 'pie_text_11') departamento  ON departamento.user_id = u.id
  10. LEFT JOIN (SELECT user_id, meta_value FROM `wp_usermeta`  WHERE `meta_key` = 'pie_text_12') ciudad   ON ciudad.user_id = u.id

con esta consulta genero la tabla de resultados que requiero, pero estoy usando subconsultas en la clausula FROM esto me impide guardar el resultado como una vista, existe alguna forma de obtener el resultado de forma mas optima?
  #2 (permalink)  
Antiguo 02/08/2016, 11:50
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consultar multiples registros de la tabla wp_usermeta para cada usuario en

Lo primero que debes determinar es qué datos son obligatorios para la registración, de tal modo de poder EVITAR el uso de LEFT JOIN y usar INNER JOIN, de ese modo no caer en relaciones en estrella, que son de muy baja performance y generadoras de errores.

Podría ser:
Código MySQL:
Ver original
  1. SELECT  u.*,
  2.     nombre.meta_value nombre,
  3.     apellido.meta_value apellido,
  4.     cedula.meta_value cedula,
  5.     fijo.meta_value fijo,
  6.     celular.meta_value celular,
  7.     fecha_nacimiento.meta_value fecha_nacimiento,
  8.     sexo.meta_value sexo,
  9.     departamento.meta_value departamento,
  10.     ciudad.meta_value ciudad  
  11. FROM `wp_users` u
  12.     INNER JOIN `wp_usermeta` nombrenombre ON nombre.user_id = u.id
  13.     INNER JOIN `wp_usermeta`  ON apellido ON apellido.user_id = u.id
  14.     LEFT JOIN `wp_usermeta`  cedula  ON cedula.user_id = u.id
  15.     LEFT JOIN `wp_usermeta`  fijo  ON fijo.user_id = u.id
  16.     LEFT JOIN `wp_usermeta`  celular  ON celular.user_id = u.id
  17.     LEFT JOIN `wp_usermeta`  fecha_nacimiento  ON fecha_nacimiento.user_id = u.id
  18.     LEFT JOIN `wp_usermeta`  sexo  ON sexo.user_id = u.id
  19.     LEFT JOIN `wp_usermeta`  departamento  ON departamento.user_id = u.id
  20.     LEFT JOIN `wp_usermeta`  ciudad   ON ciudad.user_id = u.id
  21.         nombre.`meta_key` = 'pie_text_4'
  22.     AND apellido.`meta_key` = 'pie_text_3'
  23.     AND (cedula.`meta_key` = 'pie_text_7' OR cedula.`meta_key` IS NULL)
  24.     AND (fijo.`meta_key` = 'pie_text_5' OR fijo.`meta_key` IS NULL)
  25.     AND (celular.`meta_key` = 'pie_text_6' OR celular.`meta_key` IS NULL)
  26.     AND (fecha_nacimiento.`meta_key` = 'pie_date_9' OR fecha_nacimiento.`meta_key` IS NULL)
  27.     AND (sexo.`meta_key` = 'pie_dropdown_13' OR sexo.`meta_key` IS NULL)
  28.     AND (departamento.`meta_key` = 'pie_text_11' OR departamento.`meta_key` IS NULL)
  29.     AND (ciudad.`meta_key` = 'pie_text_12' OR ciudad.`meta_key` IS NULL)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 03/08/2016, 06:50
Avatar de hmvr414  
Fecha de Ingreso: marzo-2011
Ubicación: Santiago de Cali, Colombia
Mensajes: 74
Antigüedad: 13 años, 1 mes
Puntos: 16
Respuesta: Consultar multiples registros de la tabla wp_usermeta para cada usuario en

Muchas gracias @gnzsoloyo por tu respuesta, no había logrado usar multiples join a la misma tabla entonces use subconsultas, tu solución funciona correctamente y es mas eficiente.
  #4 (permalink)  
Antiguo 03/08/2016, 07:07
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consultar multiples registros de la tabla wp_usermeta para cada usuario en



Me alegra que funcionara y más que tuviese buena performance.
Los dos primeros INNER JOIN los puse asumiendo que esos datos eran obligatorios. ;Si hay otros que sean igualmente forzosos, esos te conviene ponerlos también como INNER JOIN. No lo olvides.

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: sql, wordpress
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:15.