Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problemas con valores que se repiten en array

Estas en el tema de Problemas con valores que se repiten en array en el foro de PHP en Foros del Web. Hola, Tengo la siguiente tabla: Nombre: wp_postmeta meta_key | meta_value _product_attributes | rojo _stock | 100 ... El problema que tengo es que al pasar ...
  #1 (permalink)  
Antiguo 29/01/2015, 03:07
Avatar de Josantonius  
Fecha de Ingreso: enero-2015
Mensajes: 15
Antigüedad: 9 años, 3 meses
Puntos: 0
Pregunta Problemas con valores que se repiten en array

Hola,

Tengo la siguiente tabla:

Nombre: wp_postmeta

meta_key | meta_value
_product_attributes | rojo
_stock | 100
...

El problema que tengo es que al pasar los datos de la consulta al array solamente me recoge un valor de la columna meta_key, y necesito recoger varios valores.

Y si añado un

Código PHP:
$resultados mysql_query("SELECT wp_posts.ID,wp_posts.post_title,wp_posts.post_status,wp_postmeta.meta_value
FROM wp_posts INNER JOIN wp_postmeta
WHERE wp_posts.post_type = 'product' 
AND wp_posts.post_status = 'publish'
AND wp_posts.ID = wp_postmeta.post_id
AND wp_postmeta.meta_key = '_product_attributes'

AND wp_postmeta.meta_key = '_stock'"
) or die(mysql_error());           <-------- Línea que causa problemas

while ($eventos mysql_fetch_array($resultados)) { 

        
$datos_seleccionados[] = array(
        
'nombre' => $eventos['post_title'],
        
'status' => $eventos['post_status'],
        
'atributos' => $eventos['meta_value'],

'stock' => $eventos['meta_value'],           <-------- Línea que causa problemas
        
                 
'ID' => $eventos['ID']);
    }


$i 0;
foreach (
$datos_seleccionados as $eventos){
    
$i++;
    echo 
'ID ' $eventos['ID'] . ' NOMBRE: ' $eventos['nombre'] . ' STATUS: ' $eventos['status'] . ' ATRIBUTOS: ' $eventos['atributos'] . [COLOR="red"][B' STOCK: ' $eventos['stock'] .[/B][/COLOR]  '<br>';

Sin lo marcado en "Línea que causa problemas" el script funciona correctamente, pero al añadirle esas líneas no devuelve nada, ya que en el momento de la comparación, postmeta.meta_key = '_stock' o postmeta.meta_key = '_product_attributes', solo coincidirá uno de los dos.

Me podéis orientar un poco en cómo hacer lo que pretendo?

Gracias,

Un saludo
  #2 (permalink)  
Antiguo 29/01/2015, 08:00
 
Fecha de Ingreso: diciembre-2011
Ubicación: Corrientes
Mensajes: 12
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: Problemas con valores que se repiten en array

Hola, creo que el problema radica en la sección del while para recorrer el array asociativo de tu consulta mysql. Recuerda que, cada ciclo del while es una fila de resultados de tu consulta mysql, es decir, que tu array $datos_seleccionados[] almacenara solo la ultima fila de la consulta mysql. Tal vez deberías replantear como guardar los datos en el array, tal vez con array_push =) Me avisas si has solucionado el problema.
  #3 (permalink)  
Antiguo 29/01/2015, 09:53
Avatar de Josantonius  
Fecha de Ingreso: enero-2015
Mensajes: 15
Antigüedad: 9 años, 3 meses
Puntos: 0
Pregunta Respuesta: Problemas con valores que se repiten en array

Cita:
Iniciado por s3t3r Ver Mensaje
Hola, creo que el problema radica en la sección del while para recorrer el array asociativo de tu consulta mysql. Recuerda que, cada ciclo del while es una fila de resultados de tu consulta mysql, es decir, que tu array $datos_seleccionados[] almacenara solo la ultima fila de la consulta mysql. Tal vez deberías replantear como guardar los datos en el array, tal vez con array_push =) Me avisas si has solucionado el problema.
Gracias por tu comentario s3t3r.

He estado echando un vistazo a array.push, y desde mis desconocimiento, creo que no me valdría, ya que por lo que veo, el problema comienza con la consulta SQL.

AND wp_postmeta.meta_key = '_product_attributes'
AND wp_postmeta.meta_key = '_stock'

La consulta no devuelve nada porque no hay coincidencias, ya que al compartir la columna solo puede recoger un valor para cada tanda.

ID 911 NOMBRE: evento STATUS: publish ATRIBUTOS: STOCK: 5
ID 911 NOMBRE: evento STATUS: publish ATRIBUTOS: rojo STOCK:

Y necesito recoger varios valores de esas columnas para lanzarlos en una misma linea.



La verdad es que no se me ocurre la manera de hacerlo ahora mismo, seguiré dándole vueltas.

Por cierto, ¿hay aquí foros para SQL?

Saludos,

Última edición por Josantonius; 29/01/2015 a las 10:04
  #4 (permalink)  
Antiguo 30/01/2015, 11:29
lamek
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problemas con valores que se repiten en array

Has probado usando en el bucle mysql_fetch_assoc??

Asi:

Código PHP:
while ($eventos mysql_fetch_assoc($resultados)) { 

Pruebalo y me cuentas.
  #5 (permalink)  
Antiguo 30/01/2015, 11:47
lamek
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problemas con valores que se repiten en array

Prueba mejor con esto:

Código PHP:
$resultados mysql_query("SELECT wp_posts.ID,wp_posts.post_title,wp_posts.post_status,wp_postmeta.meta_value
FROM wp_posts INNER JOIN wp_postmeta
WHERE wp_posts.post_type = 'product' 
AND wp_posts.post_status = 'publish'
AND wp_posts.ID = wp_postmeta.post_id
AND wp_postmeta.meta_key = '_product_attributes'
AND wp_postmeta.meta_key = '_stock'"
) or die(mysql_error());       


$datos_seleccionados = array();


while (
$eventos mysql_fetch_assoc($resultados)) { 
        
        
$datos = array(
            
'nombre' => $eventos['post_title'],
            
'status' => $eventos['post_status'],
            
'atributos' => $eventos['meta_value'],
            
'stock' => $eventos['meta_value'],          
            
'ID' => $eventos['ID']
        );
        
        
array_push($datos_seleccionados$datos);
}


$i 0;
foreach (
$datos_seleccionados as $eventos){
    
$i++;
    echo 
'ID ' $eventos['ID'] . ' NOMBRE: ' $eventos['nombre'] . ' STATUS: ' $eventos['status'] . ' ATRIBUTOS: ' $eventos['atributos'] . ' <b style="color:red">STOCK: ' $eventos['stock'] .'</b>' .  '<br /';
    

  #6 (permalink)  
Antiguo 30/01/2015, 13:15
Avatar de Josantonius  
Fecha de Ingreso: enero-2015
Mensajes: 15
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Problemas con valores que se repiten en array

Muchas gracias lamek,

Lo he probado pero no devuelve resultado alguno ya que no todas las comparaciones tienen el valor de true.

AND wp_postmeta.meta_key = '_product_attributes' TRUE
AND wp_postmeta.meta_key = '_stock'") or die(mysql_error()); FALSE

o

AND wp_postmeta.meta_key = '_product_attributes' FALSE
AND wp_postmeta.meta_key = '_stock'") or die(mysql_error()); TRUE

Dependiendo de la pasada del bucle, cuando wp_postmeta.meta_key es igual a '_product_attributes' la siguiente comprobación (wp_postmeta.meta_key = '_stock') será nula ya que los valores de la línea se han rellenado con el valor de _product_attributes.

Y si en vez de un AND le coloco un OR, los resultados que lanza son incorrectos.

AND wp_postmeta.meta_key = '_product_attributes'
OR wp_postmeta.meta_key = '_stock'


ID 1 NOMBRE: Hello world! STATUS: publish ATRIBUTOS: STOCK:
STOCK:
STOCK: 7.000000
STOCK:
STOCK:
STOCK:
STOCK: 7.000000
STOCK: STOCK: STOCK: STOCK: 7.000000STOCK:
STOCK:
STOCK:
STOCK: 7.000000
...

Creo que con el array_push podría funcionar, quizá si quito la comparación (AND wp_postmeta.meta_key = '_stock') de la consulta SQL y lo coloco en un if o algo así en el PHP me podría valer. Voy a ver si se me ocurre algo, sino optaré por pagar para que me lo hagan, porque ya le he dedicado demasiadas horas a esto.

Saludos
  #7 (permalink)  
Antiguo 30/01/2015, 14:31
Avatar de Djoaq  
Fecha de Ingreso: septiembre-2012
Ubicación: Barcelona
Mensajes: 271
Antigüedad: 11 años, 7 meses
Puntos: 38
Respuesta: Problemas con valores que se repiten en array

Cita:
Y necesito recoger varios valores de esas columnas para lanzarlos en una misma linea.
Escribo desde el móvil , cuando tenga 10 min y llegue a casa le doy un ojo,peropor lo pronto..sabes que puedes concatenar con la funcion concat() ,concat_ws() o group_concat() directamente desde MySQL ? No lo he visto con detalle pero a priori no neceaitas usar la memoria para eso!
Luego le doy un ojo y otra cosa,en mi opinion no necesitas pagar para solucionar ese problema!
En esta profesión se aprende sufriendo y eso es lo que nos hace grandes!
Un saludo!
  #8 (permalink)  
Antiguo 30/01/2015, 14:46
Avatar de Josantonius  
Fecha de Ingreso: enero-2015
Mensajes: 15
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Problemas con valores que se repiten en array

Cita:
Iniciado por Djoaq Ver Mensaje
Escribo desde el móvil , cuando tenga 10 min y llegue a casa le doy un ojo,peropor lo pronto..sabes que puedes concatenar con la funcion concat() ,concat_ws() o group_concat() directamente desde MySQL ? No lo he visto con detalle pero a priori no neceaitas usar la memoria para eso!
Luego le doy un ojo y otra cosa,en mi opinion no necesitas pagar para solucionar ese problema!
En esta profesión se aprende sufriendo y eso es lo que nos hace grandes!
Un saludo!
No, no conocía esas funciones, la verdad es que voy aprendiendo muchas cosas según las necesidades. Sufriendo, como bien dices! aunque la verdad es que no hay mayor placer que el conseguirlo después de haberle puesto todo tu empeño

Sé que aprendería mucho más si siguiera dándole vueltas hasta encontrar la solución, pero tengo que entregar el proyecto la semana que viene y necesito resolver esta parte, de ahí el proponer pagar por ello.

Mientras espero tu respuesta echaré un vistazo a las funciones que me comentas, muchas gracias por tu ayuda.
  #9 (permalink)  
Antiguo 30/01/2015, 15:32
Avatar de Djoaq  
Fecha de Ingreso: septiembre-2012
Ubicación: Barcelona
Mensajes: 271
Antigüedad: 11 años, 7 meses
Puntos: 38
Respuesta: Problemas con valores que se repiten en array

Bueno ya estoy en casa ,

No entiendo muy bien tienes 2 cols de una misma tabla y quieres combinar!?

o Tienes mas tablas que quieres relacionar y luego combinar?

Podrías detallar un poco mas? a estas horas estoy ya un poco cansado!
combinas fila 1 y fila 2 de la tabla1 y tabla2 con la palabra separador ( o lo que quieras ) donde el id de la tabla 1 es relacionado con el id de la tabla 2 .
Código MySQL:
Ver original
  1. SELECT CONCAT_WS(' SEPARADOR ' ,tabla1.columna1,tabla1.columna1)
  2.  FROM tabla1.id = tabla2.id

Un saludo!
  #10 (permalink)  
Antiguo 30/01/2015, 17:08
Avatar de Josantonius  
Fecha de Ingreso: enero-2015
Mensajes: 15
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Problemas con valores que se repiten en array

Realizo la consulta en 2 tablas "wp_posts" y "wp_postmeta".

Código PHP:
$resultados mysql_query("SELECT 
wp_posts.ID,wp_posts.post_title,wp_posts.post_status,wp_postmeta.meta_value 
FROM wp_posts INNER JOIN wp_postmeta 
En la primera tabla reduzco los resultados a los valores que coincidan con "product" y "publish" y guardo en el array ID, post_status y post_type para finalmente mostrarlos en una sola fila con el echo del foreach.

Código PHP:
WHERE wp_posts.post_type 'product'  
AND wp_posts.post_status 'publish' 
Me daría varias líneas de resultados con esas coincidencias.



Utilizo el ID de la fila que coincide para buscar ese ID en la otra tabla

Código PHP:
AND wp_posts.ID wp_postmeta.post_id 
Me daría los siguientes resultados:



Y ahora mi intención sería sacar varios valores (por ejemplo los señalados en amarillo) y mostrarlos en el mismo echo.

Código PHP:
AND wp_postmeta.meta_key '_product_attributes' 
AND wp_postmeta.meta_key '_stock'") or die(mysql_error()); 
Pero esto no me funciona porque no devuelve TRUE TRUE.

El "echo" que querría mostrar sería algo parecido a esto, cada tabla es un color, con la primera tabla no hay problema, pero con la segundo tengo que utilizar los valores de la misma columna varias veces.

echo wp_posts.ID - wp_posts.post_title - wp_posts.post_status - wp_postmeta.meta_key - wp_postmeta.meta_key - wp_postmeta.meta_key;

Saludos
  #11 (permalink)  
Antiguo 30/01/2015, 18:23
Avatar de Djoaq  
Fecha de Ingreso: septiembre-2012
Ubicación: Barcelona
Mensajes: 271
Antigüedad: 11 años, 7 meses
Puntos: 38
Respuesta: Problemas con valores que se repiten en array

Hola!

Pues ya casi lo tienes , y si hay un foro de mysql !

http://www.forosdelweb.com/f86/


Código PHP:
//Intenta usar la nueva extensión mysqli ! 
$mysqli = new mysqli("localhost""root""tupass""tubd",3306);
$consulta =
Código MySQL:
Ver original
  1. wp_posts.ID,wp_posts.post_title,wp_posts.post_status,wp_postmeta.meta_value
  2. FROM wp_posts INNER JOIN wp_postmeta  
  3. WHERE wp_posts.post_type = 'product'  
  4. AND wp_posts.post_status = 'publish'
  5. AND wp_posts.ID = wp_postmeta.post_id  
  6. AND wp_postmeta.meta_key = 'total_sales'
  7. GROUP BY wp_postmeta.value
  8.  
  9.  
  10. wp_posts.ID,wp_posts.post_title,wp_posts.post_status,wp_postmeta.meta_value
  11. FROM wp_posts INNER JOIN wp_postmeta  
  12. WHERE wp_posts.post_type = 'product'  
  13. AND wp_posts.post_status = 'publish'
  14. AND wp_posts.ID = wp_postmeta.post_id  
  15. AND wp_postmeta.meta_key = '_stock'
  16. GROUP BY wp_postmeta.value
  17.  
  18.  
  19. wp_posts.ID,wp_posts.post_title,wp_posts.post_status,wp_postmeta.meta_value
  20. FROM wp_posts INNER JOIN wp_postmeta  
  21. WHERE wp_posts.post_type = 'product'  
  22. AND wp_posts.post_status = 'publish'
  23. AND wp_posts.ID = wp_postmeta.post_id  
  24. AND wp_postmeta.meta_key = '_product_attributes'
  25. GROUP BY wp_postmeta.value ";
  26. /** Con el group by meta value agrupamos por valores y quitamos los que estan en blanco y nulos**/
Código PHP:

$resultado 
$mysqli->query($consulta);
if (
$resultado->num_rows >=1) {
            while (
$fila $resultado->fetch_assoc()) {
   echo 
"<p>Total Ventas : "$fila['total_sales']." Stock :"$fila['_stock']." Características :".$fila['_product_attributes']."<br>";

                }
            }
            
$resultado->free(); 
Ánimo ,un saludo!

Última edición por Djoaq; 30/01/2015 a las 18:31
  #12 (permalink)  
Antiguo 31/01/2015, 06:49
Avatar de Josantonius  
Fecha de Ingreso: enero-2015
Mensajes: 15
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Problemas con valores que se repiten en array

Perfecto Djoaq!

Al unir las tablas y con el GROUP BY parece que realiza la consulta correctamente:



Código PHP:
$mysqli = new mysqli("localhost""***""***""***",3306);
$consulta ="SELECT 
wp_posts.ID,wp_posts.post_title,wp_posts.post_status,wp_postmeta.meta_value 
FROM wp_posts INNER JOIN wp_postmeta  
WHERE wp_posts.post_type = 'product'  
AND wp_posts.post_status = 'publish' 
AND wp_posts.ID = wp_postmeta.post_id  
AND wp_postmeta.meta_key = 'total_sales' 
GROUP BY wp_postmeta.meta_value
 
UNION
 
SELECT
wp_posts.ID,wp_posts.post_title,wp_posts.post_status,wp_postmeta.meta_value 
FROM wp_posts INNER JOIN wp_postmeta  
WHERE wp_posts.post_type = 'product'  
AND wp_posts.post_status = 'publish' 
AND wp_posts.ID = wp_postmeta.post_id  
AND wp_postmeta.meta_key = '_stock' 
GROUP BY wp_postmeta.meta_value
 
UNION
 
SELECT 
wp_posts.ID,wp_posts.post_title,wp_posts.post_status,wp_postmeta.meta_value 
FROM wp_posts INNER JOIN wp_postmeta  
WHERE wp_posts.post_type = 'product'  
AND wp_posts.post_status = 'publish' 
AND wp_posts.ID = wp_postmeta.post_id  
AND wp_postmeta.meta_key = '_product_attributes'
GROUP BY wp_postmeta.meta_value "

Luego miraré con más detenimiento cómo actúa el array_push que me pierdo bastante. Por ahora devuelve los resultados en blanco, y 7 líneas (las mismas que en la consulta SQL) y debería (al menos es lo que pretendo) lanzar cuatro líneas solamente, que es el número de ID´s distintas.

Total Ventas : Stock : Características :

Total Ventas : Stock : Características :

Total Ventas : Stock : Características :

Total Ventas : Stock : Características :

Total Ventas : Stock : Características :

Total Ventas : Stock : Características :

Total Ventas : Stock : Características :

Código PHP:
$resultado $mysqli->query($consulta);
if (
$resultado->num_rows >=1) {
            while (
$fila $resultado->fetch_assoc()) {
   echo 
"<p>Total Ventas : "$fila['total_sales']." Stock :"$fila['_stock']." Características :".$fila['_product_attributes']."<br>";

                }
            }
            
$resultado->free(); 
¿free() tiene la misma función que mysqli_free_result()?

Muchas gracias,

Saludos
  #13 (permalink)  
Antiguo 31/01/2015, 17:06
Avatar de Djoaq  
Fecha de Ingreso: septiembre-2012
Ubicación: Barcelona
Mensajes: 271
Antigüedad: 11 años, 7 meses
Puntos: 38
Respuesta: Problemas con valores que se repiten en array

Eliminamos los espacios en blanco.
Código MySQL:
Ver original
  1. wp_posts.ID,wp_posts.post_title,wp_posts.post_status,wp_postmeta.meta_value
  2. FROM wp_posts INNER JOIN wp_postmeta  
  3. WHERE wp_posts.post_type = 'product'  
  4. AND wp_posts.post_status = 'publish'
  5. AND wp_posts.ID = wp_postmeta.post_id  
  6. AND wp_postmeta.meta_key = 'total_sales'
  7. AND  wp_postmeta.value !='' /**Anulamos los espacios en blanco!**/
  8. GROUP BY wp_postmeta.value
  9.  
  10.  
  11. wp_posts.ID,wp_posts.post_title,wp_posts.post_status,wp_postmeta.meta_value
  12. FROM wp_posts INNER JOIN wp_postmeta  
  13. WHERE wp_posts.post_type = 'product'  
  14. AND wp_posts.post_status = 'publish'
  15. AND wp_posts.ID = wp_postmeta.post_id  
  16. AND wp_postmeta.meta_key = '_stock'
  17. AND  wp_postmeta.value !='' /**Anulamos los espacios en blanco!**/
  18. GROUP BY wp_postmeta.value
  19.  
  20.  
  21. wp_posts.ID,wp_posts.post_title,wp_posts.post_status,wp_postmeta.meta_value
  22. FROM wp_posts INNER JOIN wp_postmeta  
  23. WHERE wp_posts.post_type = 'product'  
  24. AND wp_posts.post_status = 'publish'
  25. AND wp_posts.ID = wp_postmeta.post_id  
  26. AND wp_postmeta.meta_key = '_product_attributes'
  27. AND  wp_postmeta.value !='' /**Anulamos los espacios en blanco!**/
  28. GROUP BY wp_postmeta.value ";
  29. /** Con el group by meta value agrupamos por valores y quitamos los que estan en blanco y nulos**/

Cita:
Por ahora devuelve los resultados en blanco, y 7 líneas (las mismas que en la consulta SQL) y debería (al menos es lo que pretendo) lanzar cuatro líneas solamente, que es el número de ID´s distintas.
En este punto , hay un par de detalles a tener en cuenta , en que criterio vas a mostrar los datos si el id esta repetido?

Un saludo!
  #14 (permalink)  
Antiguo 01/02/2015, 06:02
Avatar de Josantonius  
Fecha de Ingreso: enero-2015
Mensajes: 15
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Problemas con valores que se repiten en array

Cita:
Iniciado por Djoaq Ver Mensaje
En este punto , hay un par de detalles a tener en cuenta , en que criterio vas a mostrar los datos si el id esta repetido?
Ahí está la cuestión... si en el array no es posible añadirle una etiqueta distinta a cada id repetida de esta manera y después sacarlos en una misma línea.

Código PHP:
'value1' => $eventos['meta_value']
'value2' => $eventos['meta_value']
'value3' => $eventos['meta_value']

echo 
$resutado['value1'] | $resutado['value2'] | $resutado['value3']; 
Si no consigo hacerlo así, también me puede valer meter cada resultado en un mismo array dividido por comas y separar cada valor, para luego leer el array creado.

Código PHP:
$resultado 'value1, value2, value3'
$value_array explode(',',$resultado); 
Gracias por tu ayuda,

Saludos
  #15 (permalink)  
Antiguo 01/02/2015, 06:13
Avatar de Djoaq  
Fecha de Ingreso: septiembre-2012
Ubicación: Barcelona
Mensajes: 271
Antigüedad: 11 años, 7 meses
Puntos: 38
Respuesta: Problemas con valores que se repiten en array

No me des las gracias ,
Para eso estamos!
Tengo que salir ahora pero a última hora de la tarde me conecto,dime exactamente como necesitas la matriz cuando el id se repite , es decir
{id:100,valor:blabla} si se repite {id:100,valor:{1:blabla,2:blabla1}} o {id:100,valor:blabla2-blabla1}

Un saludo!
  #16 (permalink)  
Antiguo 01/02/2015, 11:18
Avatar de Josantonius  
Fecha de Ingreso: enero-2015
Mensajes: 15
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Problemas con valores que se repiten en array

Código:
{id:100,valor:blabla2-blabla1}
De esta manera me vendría bien, como siempre leerá las líneas en el mismo orden no tendría problema, el separador sería lo de menos en principio.

Nunca está de más ser agradecido y más cuando te están echando una mano ;)

Saludos!
  #17 (permalink)  
Antiguo 01/02/2015, 12:25
Avatar de Djoaq  
Fecha de Ingreso: septiembre-2012
Ubicación: Barcelona
Mensajes: 271
Antigüedad: 11 años, 7 meses
Puntos: 38
Respuesta: Problemas con valores que se repiten en array

bueno en primer lugar usa esta consulta :

Código MySQL:
Ver original
  1. GROUP_CONCAT(wp_postmeta.meta_value SEPARATOR '--') as 'datos'
  2. /** Cada vez q exista un valor wp_postmeta.meta al agrupar lo concatenamos!**/
  3. FROM wp_posts INNER JOIN wp_postmeta  
  4. WHERE wp_posts.post_type = 'product'  
  5. AND wp_posts.post_status = 'publish'
  6. AND wp_posts.ID = wp_postmeta.post_id  
  7. AND wp_postmeta.meta_key = 'total_sales'
  8. AND  wp_postmeta.value !='' /**Anulamos los espacios en blanco!**/
  9. GROUP BY wp_postmeta.value,wp_postmeta.post_id
  10. /** Con el group by meta value agrupamos && id y quitamos los que estan en blanco y nulos**/
  11.  
  12. GROUP_CONCAT(wp_postmeta.meta_value SEPARATOR '--') as 'datos'
  13. FROM wp_posts INNER JOIN wp_postmeta  
  14. WHERE wp_posts.post_type = 'product'  
  15. AND wp_posts.post_status = 'publish'
  16. AND wp_posts.ID = wp_postmeta.post_id  
  17. AND wp_postmeta.meta_key = '_stock'
  18. AND  wp_postmeta.value !='' /**Anulamos los espacios en blanco!**/
  19. GROUP BY wp_postmeta.value,wp_postmeta.post_id
  20. /** Con el group by meta value agrupamos && id y quitamos los que estan en blanco y nulos**/
  21.  
  22. GROUP_CONCAT(wp_postmeta.meta_value SEPARATOR '--') as 'datos'
  23. /**Concatenamos los valores con separado**/
  24. FROM wp_posts INNER JOIN wp_postmeta  
  25. WHERE wp_posts.post_type = 'product'  
  26. AND wp_posts.post_status = 'publish'
  27. AND wp_posts.ID = wp_postmeta.post_id  
  28. AND wp_postmeta.meta_key = '_product_attributes'
  29. AND  wp_postmeta.value !='' /**Anulamos los espacios en blanco!**/
  30. GROUP BY wp_postmeta.value,wp_postmeta.post_id
  31. /** Con el group by meta value agrupamos && id y quitamos los que estan en blanco y nulos**/

Y el php

Código PHP:
Ver original
  1. $resultado = $mysqli->query($consulta);
  2. if ($resultado->num_rows >=1) {
  3.    while ($fila = $resultado->fetch_assoc()) {
  4.    echo $fila['datos']."<br>";
  5.  
  6.                 }
  7.             }
  8. $resultado->free();

Luego si añadieras mas campos a la consulta :
Código MySQL:
Ver original
  1. GROUP_CONCAT(wp_postmeta.meta_value SEPARATOR '--') as 'datos',
  2. id,
  3. blaa..bla.. resto sql

Deberías generar y recorrer la matriz tal que así :
Código PHP:
Ver original
  1. $resultado = $mysqli->query($consulta);
  2. if ($resultado->num_rows >=1) {
  3.    while ($fila = $resultado->fetch_assoc()) {
  4.  
  5.     $matriz[$fila['id']] = $fila['datos']
  6.                 }
  7.             }
  8.  $resultado->free();  
  9. var_dump($matriz)//vemos la estructura de la matriz!
  10. foreach ($matriz['id'] as $key => $value) {
  11.         echo $key;
  12.         echo $value;
  13.         /**debería devolver id y value el valor datos !**/
  14. }

Todo lo que escribo es al vuelo sin comprobarlo ( tanto sql como php ) pero esto son ejemplos para que le pilles el tranquillo !

De todas formas.. me preocupa la lógica del modelo relacional que pretendes...
me da un poco de miedo que estemos pasando cosas por alto..

Lo guay sería tener un muestreo de la bd y que habláramos con calma que pretendes, tengo
miedo de que con las prisas vayas a ... ya me entiendes.. "liarla parda"!
Descripción de "liarla parda" : entregarle algo al cliente convencido de que funciona bien y que tenga errores graves de lógica que perjudiquen la actividad económica del cliente!

Si quieres mandarme un mp .. hablamos ( insisto en que mientras que el trabajo lo hagas tú este foro es gratis ! )

Un saludo!
:D
  #18 (permalink)  
Antiguo 02/02/2015, 01:38
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Problemas con valores que se repiten en array

Pregunto yo....

¿No os estáis complicando mucho?

Una simple query de este estilo ayudaria mucho:
Código MySQL:
Ver original
  1. SELECT wp_posts.*, GROUP_CONCAT(CONCAT(meta_key, ":", meta_value) SEPARATOR '|') as Meta FROM wp_posts LEFT JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id GROUP BY wp_posts.ID

Te daria todos los valores de wp_posts, y los postsmeta (que siempre puedes fitlrar por metakey añadiendo un where!) dentro del campo "Meta". Este te crearia un string del estilo:

key:value|key:value|key:value|key:value|key:value

Y con un explode un poco trabajado, podrías crearte un array ;)

PD: Lo unico que deberias ir con cuidado con los campos que están "serialized" ;)

Saludos!
__________________
>> Eleazan's Source
>> @Eleazan
  #19 (permalink)  
Antiguo 02/02/2015, 11:55
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 2 meses
Puntos: 1146
Respuesta: Problemas con valores que se repiten en array

y pregunteme yo... no se están complicando la vida todos?

desde aquí empezamos mal
Cita:
Nombre: wp_postmeta
Este tema corresponde al área de wordpress y no a PHP, si hubieras preguntado en wordpress o te movieran para allá... ya se te habría dicho que wordpress incluye funciones nativas para extraer esos datos.


aquí tienes link a la documentación de get_post_meta() que es lo que necesitas para esto....un ejemplo de como debe quedarte.

Código PHP:
Ver original
  1. <?php while ($teamwork_loop->have_posts()) : $teamwork_loop->the_post();?>
  2. <li>
  3.     <h2><?php the_title();?></h2>
  4.     <?php
  5.     $_stock = get_post_meta(get_the_id(),'_stock',true);
  6.     $_color = get_post_meta(get_the_id(),'_color',true);
  7.     $_type = get_post_meta(get_the_id(),'_type',true);
  8.     ?>
  9.     <p>Tenemos un stock de <?php echo !empty($_stock)?$_stock:''?></p>
  10.     <p>Tenemos en el color <?php echo !empty($_color)?$_color:''?></p>
  11.     <p>Tenemos del tipo <?php echo !empty($_type)?$_type:''?></p>
  12. </li>
  13. <?php endwhile;?>
  #20 (permalink)  
Antiguo 03/02/2015, 01:02
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Problemas con valores que se repiten en array

Que maneje las tablas de wp, no significa que sea un plugin interno de wp...

Por tanto, no tiene pq tener disponibles las funciones de wp ;)
__________________
>> Eleazan's Source
>> @Eleazan
  #21 (permalink)  
Antiguo 03/02/2015, 09:37
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 2 meses
Puntos: 1146
Respuesta: Problemas con valores que se repiten en array

Mandar a llamar el archivo wp-load.php y tendrá todas las funciones a su disposición, sin el diseño/layout, ni la carga de librerías js, css y de mas... salvo que me digas que esta fuera del propio dominio.

:) yo alguna vez caí en lo que esta haciendo el compañero, creando sus propias consultas y tratando de organizar todo, pero la verdad que mientras trabaje dentro del mismo hosting/dominio no hay necesidad de complicarse la vida....
  #22 (permalink)  
Antiguo 07/02/2015, 14:09
Avatar de Josantonius  
Fecha de Ingreso: enero-2015
Mensajes: 15
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Problemas con valores que se repiten en array

Muchas gracias chicos, finalmente conseguí solucionarlo, de una manera un poco cutre, pero me valió para salir del apuro y entregar el trabajo.

Cuando tenga algo de más tiempo (y me empape más sobre php) intentaré modificar el script con los consejos que me habéis dado y optimizarlo, aunque por ahora parece que va bien y no ha afectado en la carga de las páginas ni nada por estilo, estoy segurísimo de que se podría mejorar bastante y no repetir tanto.

Básicamente lo que hice fue crear nuevas columnas en la tabla donde tenía la info de los productos, y pasar de una tabla a otra los valores que necesitaba.

Código PHP:
//Pasamos datos de una tabla a otra para actualizar todos los eventos

// Actualizamos el valor de los stocks
$stock mysql_query("UPDATE wp_posts SET wp_posts.stock = (SELECT wp_postmeta.meta_value
FROM wp_postmeta
WHERE wp_posts.post_type =  'product'
AND wp_posts.post_status =  'publish'
AND wp_posts.ID = wp_postmeta.post_id
AND wp_postmeta.meta_key =  '_stock' 
AND wp_postmeta.meta_value !=  ''
GROUP BY wp_postmeta.meta_value
LIMIT 0 , 30)"
) or die(mysql_error()); 

// Actualizamos el valor de los precios
$precio mysql_query("UPDATE wp_posts SET wp_posts.precio = (SELECT wp_postmeta.meta_value
FROM wp_postmeta
WHERE wp_posts.post_type =  'product'
AND wp_posts.post_status =  'publish'
AND wp_posts.ID = wp_postmeta.post_id
AND wp_postmeta.meta_key =  'precio' 
AND wp_postmeta.meta_value !=  ''
GROUP BY wp_postmeta.meta_value
LIMIT 0 , 30)"
) or die(mysql_error()); 
... 
Sacar los datos y meterlos en un array:

Código PHP:
$resultados mysql_query("SELECT post_title, guid, precio, edad, imagen, fecha_evento, ciudad, consumicion, sexo_1, sexo_2, plazas_sexo_1, plazas_sexo_2
FROM wp_posts
WHERE post_type = 'product' 
AND post_status = 'publish'"
) or die(mysql_error());         


while (
$eventos mysql_fetch_array($resultados)) { 

        
$datos_seleccionados[] = array(
        
'post_title' => $eventos['post_title'],
        
'guid' => $eventos['guid'],
        
'precio' => $eventos['precio'],
        
'imagen' => $eventos['imagen'],
        ...);
    } 
Y foreach para imprimirlos en pantalla:

Código PHP:
$i = 0;
foreach ($datos_seleccionados as $eventos){
    $i++;
?>
<div id="eventos_top">
    <div class="row">
        <div class="two columns">
            <div class="evento_titulo">
                <h5><?php echo $eventos['post_title']; ?></h5>
            </div>
        </div>
...
    </div>
</div>

<?php
}  
?>
El script era por facilitarle un poco la vida al cliente, para que cuando añadiera un producto (evento) en Woocoomerce, se actualizaran automáticamente esos valores una lista de eventos en el home.

Algo así quedó sin CSS:




En principio doy el tema por solucionado, pero si veis que el script pudiera causar algún problema de lógica (que ya me has dejado con la mosca tras la oreja Djoaq ) o algo parecido, os agradecería que me lo indicarais.

Saludos!

Etiquetas: mysql, select, sql, tabla
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 02:07.