entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

No consigo sacar una consulta SQL

Buenas tardes,

mi problema es que necesito un dato pero no hago la consulta bien.

Tengo dos tablas, una que se llama lv_productos y otra lv_usuarios. (entre otras). pero para esta consulta solo hacen falta estas dos.

En la tabla lv_productos tengo: idProducto, nombre, descripcion, precio, fecha, compra_venta, seccion, user.

En la tabla lv_usuarios tengo : user, mail, pass, permiso, telefono, mostrarTelefono.

mostrarTeléfono es un int de 0,1 que me indica (a la hora del registro) si quiere mostrar en el anuncio el teléfono o no. Si es un uno , en en anuncio mostrará su teléfono, si es un 0 mostrará "no hay teléfono".

El problema es que no hago la consulta bien o no se porque estoy un poco líado. El código es el siguiente que tengo yo y siempre me saca el primer mostrarTelefono de la tabla y no lo quiero así, quiero que me saque el del user que puso ese producto.

$consulta="SELECT * FROM lv_usuarios u, lv_productos p WHERE u.user=p.user;";       
        $resultado=$conexion->query($consulta); 

        while($fila=$resultado->fetch()){

            if($fila['mostrarTelefono']==1){

               echo "<span id='negrita'>Teléfono:</span>".$fila['telefono'];            
            }

            else{   

               echo "No hay telefono";          
            }               
        }

carlossevi comentado Feb 12, 2014

Hola jabixo, si te he entendido bien este código sólo te está mostrando un resultado (dejando un momento de lado el funcionamiento del mostrarTelefono). O bien la consulta sólo devuelve un resultado o el manejo de los resultados no es el correcto.

Comprueba en tu gestor de BBDD (phpMyAdmin) la consulta para ver los resultados que devuelve. Si ahí ves más de un resultado pero el código que nos muestras no lo haces el problema debería estar en el código de las clases de los objetos $conexion y $resultado. ¿Podrías darnos más información?

MrGenis comentado Feb 13, 2014

De echo Carlos estas en lo correcto, el fetch() es para obtener un solo resultado, se tendria que utilizar el fetchAll().
http://www.php.net/manual/es/pdostatement.fetch.php

3 Respuestas

1voto

Leonardo-Tadei Puntos214780

Hola jabixo,

no debería ser, pero por si acaso, probá poner como condición

if($fila['mostrarTelefono']==1)

(asumiendo que 1 significa que sí se quiere mostrar y 0 significa que no)

Si no es esto, por vafor, poné una vuelco de la estructura de las dos tablas en SQL y si te es posible, con 2 o 3 registros cada una, para poder probar las querys.

Saludos!

jabixo comentado Feb 11, 2014

Perdona pero al intentar pegar el volcado, me sale un alert con lo siguiente:
Unexpected response from server - please try again or switch off Javascript.

Leonardo-Tadei comentado Feb 11, 2014

Hola Jabixo,

la salida debe ser demasiado grande... probá poner primero sola las 2 estructuras, y luego solo 2 o 3 registros de cada tabla.

jabixo comentado Feb 11, 2014

No puedo insertarlo.. son solo 5 o 6 líneas.. debe haber algún problema al insertar ese tipo de contenido de BD.. si fuera texto normal supongo que sí lo pondría bien..

Leonardo-Tadei comentado Feb 12, 2014

Copialo en http://pastebin.com/ y envianos el enlace... de paso se puede ver por qué no lo acepta el foro.

2votos

MrGenis Puntos1330

Hola, me parece que tu Query esta usando un JOIN forzado al "concatenar" dos tablas con el FROM, esto genera como salida una consulta con los datos repetidos explico.

SELECT * FROM lv_usuarios u, lv_productos p WHERE u.user=p.user

Dado que tu comparación es de lvusuarios hacia lvproductos los datos que corresponden a lv_usuarios se estarán repitiendo en cada fila, por lo que esta consulta te retorna una colección de con estas columnas.

user, idProducto, nombre, descripcion, precio, fecha, compraventa, seccion, user, mail, pass, permiso, telefono, mostrarTelefono

He probado con un JOIN y es mas rápido cuando el volumen de datos es grande (0.0052 where contra 0.0015 join, con una base de 9,194 registros y mostrando los primeros 1,000 datos)

NOTA : Revisa si la consulta (fetch) es asociativa, ya que de lo contrario te esta retornando lo datos como indices.


Pasando con lo del teléfono.
Prueba con estas y ve cual te funciona.

if( $fila['mostrarTelefono'] ) {
    // CODIGO : Ya que es un numero ( 1 , 0 ) es tratado como booleano.
}
----
if( $fila['mostrarTelefono'] == '1') {
    // CODIGO : Es posible que este guardado como cadena. 
    //Pero no debería de existir problema ya que estas comparando valor.
}

1voto

isirivm Puntos160

Asi a groso modo parece que la Query está bien, pero me he dado cuenta que tienes un error en el código que puede estar dándote problemas, no se si es lo que provoca el fallo, pero no es buena práctica. Me explico:
En la siguiente línea echo "<span id='negrita'>Teléfono:</span>".$fila['telefono']; a la estiqueta span estás asignándole un id, un identificador no debe repetirse en una misma página, y al estar dentro del While y en el caso de que se repita la condición varias veces, imprimiría la etiqueta más de una vez y existirían varias estiquetas span con el mismo identificado, deberías asignarle una clase no un id.

Por favor, accede o regístrate para responder a esta pregunta.

¿Conoces alguien que puede responder?
¡Comparte esta pregunta!


Otras Preguntas y Respuestas


Actividad Reciente

...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta