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

Leer columnas metakey de wordpress

Estas en el tema de Leer columnas metakey de wordpress en el foro de Mysql en Foros del Web. Hola, tengo un problema al leer una columna en la BD de mi wordpress. A ver si me explico. Dada la consulta.... (simplificada al where, ...
  #1 (permalink)  
Antiguo 22/11/2012, 00:38
 
Fecha de Ingreso: octubre-2012
Mensajes: 38
Antigüedad: 11 años, 6 meses
Puntos: 0
Leer columnas metakey de wordpress

Hola, tengo un problema al leer una columna en la BD de mi wordpress. A ver si me explico. Dada la consulta.... (simplificada al where, que es donde viene la historia)

SELECT tal FROM cual
WHERE wpum.meta_key = 'fecha_nac' AND (wpum.meta_value) >= '12/12/0001'

Esto funciona y es bueno

Una segunda SELECT, que sería esta misma pero cambiando el where....

WHERE wpum.meta_key = 'genero' AND (wpum.meta_value) = 'female'

...también funciona, y también es buena.

Ahora bien, en el momento en que los dos criterios colisionan...

SELECT tal FROM cual
WHERE
wpum.meta_key = 'fecha_nac' AND (wpum.meta_value) >= '12/12/0001'
AND wpum.meta_key = 'genero' AND (wpum.meta_value) = 'female'

...esto ya no funciona. Lógicamente. ¿Un ejemplo de como leer los dos valores a la vez? ¿Algo asi como una subselect? (que no consigo plantear) El tema es que en wordpress esta tabla es rara, por que tiene un campo meta_key con varios valores, en ese campo, segun cual escojas, el campo value va a contener valor diferente, por lo que si lees la meta_key fecha de nacimiento, si, su value es accesible, pero si uego quieres cruzar (and) esto con la meta key genero, ese campo ya tiene el valor fecha de nacimiento. Esto sucede por estar asi de rara planteada la tabla, si fuese varias columnas, perfecto :(

Molto gracie
  #2 (permalink)  
Antiguo 22/11/2012, 07:01
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: Leer columnas metakey de wordpress

Es algo confuso el ejemplo que muestras, al menos para los que jamás usamos Wordpress ni pensamos hacerlo), porque no se ve de dónde sale o qué es esa "tabla" denominada "wump", donde están los parámetros que buscas.
Pero asumiendo que es una tabla relacionada con la del FROM, te comento que por lo general cuando una serie de N registro de la misma tablase relaciona con un campo distinto de otra en un mismo registro, la consulta debe invocar la tabla que posee los N valores una vez por cada relación, obviamente con sus respectivos alias.
El problema es que pueden generarse productos cartesianos en determinados casos. Y eso es malo, muy malo.
Por lo demás, resulta difícil darte una buena respuesta sin que nos ejemplifiques mejor lo que tienes, porque no vemos las relaciones entre tablas, ni la forma en que generas la verdadera consulta.
Lo que pones, para mi, no es lo suficientemente claro para poder responderte con una consulta de ejemplo.
__________________
¿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 26/11/2012, 03:12
 
Fecha de Ingreso: octubre-2012
Mensajes: 38
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Leer columnas metakey de wordpress

Gracias

Mi alias wpum es mi alias para wp_usermeta, (las tablas de wp suelen empezar por wp) la cual es una tabla relativamente conocida en wordpress. Esta tabla tiene un id que es su clave foránea, y tre scolumnas solamente, id, meta_key, y value (de este meta_key)

P.ej, si hay 10 meta_keys (conceptos de metausuario) para cada user, y tenemos 10 users, tendremos 100 entradas, los 10 meta_keys para cada id/usuario.

A mi me interesan los meta_keys "fecha_nac" y "genero", si me interesase solo uno, usaria la sentencia dicha, p.ej WHERE wpum.meta_key = 'genero' AND (wpum.meta_value) = 'female' pero al necesitar las dos, entiendo que no puedo hacer

WHERE
wpum.meta_key = 'fecha_nac' AND (wpum.meta_value) >= '12/12/0001'
AND wpum.meta_key = 'genero' AND (wpum.meta_value) = 'female'


eso es evidente, lo que no llego a ver es como plantear una subselect o algo que cruce las dos. Pongo otro ejemplo mas explicito para explicarme mejor

SELECT user_id FROM wp_usermeta
WHERE
wp_usermeta.meta_key = 'genero' AND (wp_usermeta.meta_value) = 'male'

Simple y para toda la familia, o

SELECT user_id FROM wp_usermeta
WHERE
wp_usermeta.meta_key = 'fecha_nac' AND (wp_usermeta.meta_value) = '12/12/2012'

Simple y para toda la familia tb, ¿pero como mezclaría las dos condiciones? Hago notar que estoy anidando como condiciones el mismo campo (meta_key), no acabo de ver como plantearlo.
  #4 (permalink)  
Antiguo 29/11/2012, 03:47
 
Fecha de Ingreso: octubre-2012
Mensajes: 38
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Leer columnas metakey de wordpress

¿Nadie tiene alguna orientación?
  #5 (permalink)  
Antiguo 29/11/2012, 07:59
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: Leer columnas metakey de wordpress

Mira, el problema que tenemos apra responderte es, a mi entender, que tenemos un conflicto conceptual con una tabla como la de esas metakeys: Es una estructura que representa una violación tan flagrante al modelo relacional que nuestra primera reacción es descartar el problema como "basura".
No es algo peyorativo, sucede que la primera regla absoluta del modelo E-R es que un atributo de una entidad sólo puede tener un único dominio (campo de existencia o rango de valores válidos), por lo que es impensable, para una base bien diseñada, usar una tabla de parámetros cuyos valores representes cosas disimiles como esas.
¿Se entiende el concepto?
Un atributo puede ser fecha, pero sólo debe ser fechas, puede ser números, pero sólo debe ser números. En cambio esa tabla puede ser cualquier cosas, incluso cosas contradictorias, y eso es imposible a nivel de razonamiento.

Por eso nos resulta un poco fastidioso ocuparnos de responder una consulta tan conflictiva.

Ahora bien, yendo a tu pregunta, la solución a una consulta que verifica dos parámetros diferentes sobre el mismo campo, es exactamente igual que si consultaras los nombres de los usuarios de un mensaje que tiene como remitente y destinatario sendos usuarios del mismo sistema, ambos en la tabla Usuarios: Se debe invocar la tabla relacionada dos veces, una por cada usuario buscado.
En tu caso, esta relación implica llamar la tabla de parámetros una vez por cada parámetro buscado.
¿Se entiende?

O sea:
Código MySQL:
Ver original
  1. SELECT M1.user_id
  2. FROM wp_usermeta m1 INNER JOIN wp_usermeta m2 ON M1.user_id  = M2.user_id
  3.     M1.meta_key = 'genero' AND M1.meta_value = 'male'
  4.     AND M2.meta_key = 'fecha_nac' M2.meta_value = '12/12/2012'

Esa sería mas o menos la idea.

Un detalle: Recuerda que aplicaciones como WorPress son creadas por programadores, y eso no significa que desde el punto de vista del diseño de datos estén bien creadas. Los arquitectos de aplicaciones no necesariamente saben de arquitectura de datos. Son especialidad diferentes, y los programadores suelen menospreciar la ortodoxia de los DBA porque no la comprenden, y por eso terminan creando estructuras de datos que no están bien diseñadas.
Que WordPress sea MUY usado, no implica necesariamente que su arquitectura de datos sea especialmente buena.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 30/11/2012, 18:55
 
Fecha de Ingreso: octubre-2012
Mensajes: 38
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Leer columnas metakey de wordpress

No, si te entiendo perfectamente :) y gracias de nuevo. El tema es que he recibido el proyecto ya finalizado solo para funciones de leves mantenimientos, no entra ni de lejos en mis conocimientos el replantear la BBDD ni las sentencias existentes, tienes toda la razón en lo que dices, y el caso es todavia peor, aunque no viene al caso, por cuando hablamos de meta_key = fecha_nac, su meta_value es una fecha... pero el campo meta_value es texto, no un date, por lo que a la hora de operar fechas te imaginarás... (pero eso ya son otras historias, necesitaba saber como enfocar este problema, y ahora tengo la idea para mi caso concreto, mas o menos, gracias.

Etiquetas: columnas, select, tabla, wordpress, campos
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 18:52.