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

Por favor comprobadme esta consulta

Estas en el tema de Por favor comprobadme esta consulta en el foro de Bases de Datos General en Foros del Web. No sé por qué me da error la sigueinte consulta. La quiero hacer desde una página php a una BD MYSQL. Los campos están bien ...
  #1 (permalink)  
Antiguo 21/05/2005, 10:31
 
Fecha de Ingreso: mayo-2005
Mensajes: 510
Antigüedad: 19 años, 6 meses
Puntos: 1
Por favor comprobadme esta consulta

No sé por qué me da error la sigueinte consulta. La quiero hacer desde una página php a una BD MYSQL. Los campos están bien escritos, es una consult anidada y si la ejecuto por separado sale todo bien, por tanto el error está en la unión de las 2, en el IN. ¿Sabéis por qué no sale bien?

SELECT *
FROM USUARIOS
WHERE DNI IN (SELECT DNI
FROM USUARIO_ROL
WHERE CODIGO_ROL LIKE 'T')
  #2 (permalink)  
Antiguo 21/05/2005, 12:21
Avatar de Gabriel0702  
Fecha de Ingreso: febrero-2005
Mensajes: 155
Antigüedad: 19 años, 8 meses
Puntos: 0
yo la probé en access y no me da error, y en mysql y no tengo errores, pon el error que te marca y así sabremos qué es lo que pasa
  #3 (permalink)  
Antiguo 21/05/2005, 12:57
 
Fecha de Ingreso: mayo-2005
Mensajes: 510
Antigüedad: 19 años, 6 meses
Puntos: 1
Éste es el mensaje q me aparece al ejecutar la consulta. No sé qué quiere decir la info q dá...

Error
SQL-query :

SELECT DNI, DEPARTAMENTO, USUARIO, PASSWORD FROM USUARIOS WHERE DNI IN (SELECT DNI FROM USUARIO_ROL WHERE CODIGO_ROL LIKE 'S') LIMIT 0, 30

MySQL ha dicho:

You have an error in your SQL syntax near 'SELECT DNI FROM USUARIO_ROL WHERE CODIGO_ROL LIKE 'S') LIMIT 0, 30' at line 1
  #4 (permalink)  
Antiguo 21/05/2005, 13:06
Avatar de xcars  
Fecha de Ingreso: mayo-2005
Ubicación: El Salvador
Mensajes: 753
Antigüedad: 19 años, 6 meses
Puntos: 4
Cita:
Iniciado por AnDrEa MM
Éste es el mensaje q me aparece al ejecutar la consulta. No sé qué quiere decir la info q dá...

Error
SQL-query :

SELECT DNI, DEPARTAMENTO, USUARIO, PASSWORD FROM USUARIOS WHERE DNI IN (SELECT DNI FROM USUARIO_ROL WHERE CODIGO_ROL LIKE 'S') LIMIT 0, 30

MySQL ha dicho:

You have an error in your SQL syntax near 'SELECT DNI FROM USUARIO_ROL WHERE CODIGO_ROL LIKE 'S') LIMIT 0, 30' at line 1
proba la consulta quitando el LIMIT
  #5 (permalink)  
Antiguo 21/05/2005, 13:27
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 23 años, 3 meses
Puntos: 381
¿has probado a pedirle '%S' o '*S? en vez de 'S' ??
  #6 (permalink)  
Antiguo 21/05/2005, 13:29
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 23 años, 3 meses
Puntos: 381
Ah, creía que buscabas por la letra del DNI ¿qué tipo de dato contiene el campo CODIGO_ROL ?
  #7 (permalink)  
Antiguo 21/05/2005, 13:55
 
Fecha de Ingreso: mayo-2005
Mensajes: 510
Antigüedad: 19 años, 6 meses
Puntos: 1
CODIGO_ROL sólo puede contener 'T', 'S' o 'A'

Lo de LIMIT lo ha sacado en el error MYSQL, no es de mi consulta

Mi consulta es:
SELECT DNI, DEPARTAMENTO, USUARIO, PASSWORD FROM USUARIOS WHERE DNI IN (SELECT DNI FROM USUARIO_ROL WHERE CODIGO_ROL LIKE 'S')

He cambiado una cosilla y ahora me dice q la consulta devuelve un resutlado vacío, q no es cierto, al ejecutarla en MYSQL sí q saca tuplas de resultado...
Ya voy a comprobar qué puede pasar
  #8 (permalink)  
Antiguo 21/05/2005, 16:09
 
Fecha de Ingreso: enero-2004
Ubicación: Salto
Mensajes: 484
Antigüedad: 20 años, 10 meses
Puntos: 2
Un problema de lógica. Si es q no estoy perdido, el segundo SELECT no entiendo el LIKE. Si como dices q el campo solo puede tener T, S o A, deberías de usar =, es decir q seleccione el DNI de la tabla usuarios_rol cuando codigo_rol sea IGUAL a S.
Explícame porq no puedes hacerlo así o postea algo más del código, sobre todo las variables de PHP comprueba q esten mandando los datos q esperas con un echo antes de la consulta.
Debes de tener en cuenta q los subquery son admitidos en MySQL a partir de la versión 4.1, chequea q versión están usando. Porq si cada consulta por separado funciona bien. El problema podría estar ahí.
Saludos cuidate
__________________
Dios dira que esto no es justo, pero lo sera...

Última edición por sebtev; 21/05/2005 a las 16:37
  #9 (permalink)  
Antiguo 22/05/2005, 11:12
 
Fecha de Ingreso: mayo-2005
Mensajes: 510
Antigüedad: 19 años, 6 meses
Puntos: 1
Ups, ues creo q tengo la versión 1.3... :( Me bajé el paquete PHPTriad, q te instala MYSQL, Apache y PHP. ¿Cómo puedo hacer esa consulta sin la subquery? Las variables de la página desde donde llamo se pasan bien. Dejo aquí el código de la página:

<?php
if (isset($user)) $_SESSION['user'] = $user;
// Conexión a la BD ...
if ($_SESSION['user'] == "tec") {
echo "Técnicos dados de alta";
$sql1 = "SELECT ... FROM USUARIOS WHERE DNI IN (SELECT DNI FROM USUARIO_ROL WHERE CODIGO_ROL = 'T')";
$rsql1 = mysql_query($sql1, $servconex) or die(mysql_error());
if (mysql_num_rows($rsql1)>0) {
echo "<table ...
echo "</table>";
}
else if ($_SESSION['user'] == "sec") {
echo "Secretarios dados de alta";
$sql1 = "SELECT ... FROM USUARIOS WHERE DNI IN (SELECT DNI FROM USUARIO_ROL WHERE CODIGO_ROL = 'S')";
$rsql1 = mysql_query($sql1, $servconex) or die(mysql_error());
if (mysql_num_rows($rsql1)>0) {
echo "<table
echo "</table>";
  #10 (permalink)  
Antiguo 22/05/2005, 12:03
 
Fecha de Ingreso: mayo-2005
Mensajes: 510
Antigüedad: 19 años, 6 meses
Puntos: 1
Bueno, ya he cambiado la consulta para q no haya una subquery, pero sigue sin salirme... :(
Ahora estoy así:

if ($_SESSION['user'] == "tec") {
echo "Técnicos dados de alta";
$sql = mysql_query("SELECT DNI FROM USUARIO_ROL WHERE CODIGO_ROL = 'T'", $servconex);
if (mysql_num_rows($sql)>0) {
echo "<table>";
echo "<TR><TD>DNI</TD>";
echo "<TD>DEPARTAMENTO</TD>";
echo "<TD>USUARIO</TD>";
echo "<TD>PASSWORD</TD></TR>";
$contador = 0;
while ($myrow = mysql_fetch_row($sql)) {
$sql2 = mysql_query("SELECT DNI, DEPARTAMENTO, USUARIO, PASSWORD FROM USUARIOS WHERE DNI LIKE ".$myrow[$contador], $servconex);
$myrow2 = mysql_fetch_array($sql2); <---- ERROR
$contador++;

echo "<TD>".$myrow2['DNI']."</A>";
...

Me da un error en la 4ª línea empezando por abajo (de lo q he escrito): Supplied argument is not a valid MySQL result resource in --la línea q he indicado--.
¿Sabéis decirme qué hago mal?
  #11 (permalink)  
Antiguo 23/05/2005, 04:33
 
Fecha de Ingreso: abril-2002
Mensajes: 432
Antigüedad: 22 años, 7 meses
Puntos: 0
Hola, has probado la consulta sustituyendo la sentencia like e igualando el valor directamente a una cadena.


Me da que el error puede estar en el like, LIKE ".$myrow[$contador]

No te falta un . al final del like??


Un saludo
  #12 (permalink)  
Antiguo 23/05/2005, 16:11
Avatar de Gabriel0702  
Fecha de Ingreso: febrero-2005
Mensajes: 155
Antigüedad: 19 años, 8 meses
Puntos: 0
No vi todo tu código, pero creo que deberías poner así:
Código PHP:
$sql2 mysql_query("SELECT DNI, DEPARTAMENTO, USUARIO, PASSWORD FROM USUARIOS WHERE DNI LIKE '".$myrow[$contador]."'"$servconex); 
es la parte de código que se me hace que está funcionando mal, debido a la comilla omitida, ahora fíjate en esa comilla después del like
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 14:21.