Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] problemas con select.

Estas en el tema de problemas con select. en el foro de PHP en Foros del Web. Hola, espero y puedan ayudarme, presiento que es un problema muy sencillo, pero no logro resolverlo. Necesito hacer un select, que me traiga la información ...
  #1 (permalink)  
Antiguo 20/02/2014, 11:15
 
Fecha de Ingreso: enero-2014
Mensajes: 127
Antigüedad: 10 años, 2 meses
Puntos: 2
problemas con select.

Hola, espero y puedan ayudarme, presiento que es un problema muy sencillo, pero no logro resolverlo.

Necesito hacer un select, que me traiga la información de usuarios respecto a la búsqueda, pero solamente si su nivel de permiso es la indicada.

Aquí el código completo

Código PHP:
<?php
if (!function_exists("GetSQLValueString")) {
function 
GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""
{
  if (
PHP_VERSION 6) {
    
$theValue get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  
$theValue function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch (
$theType) {
    case 
"text":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;    
    case 
"long":
    case 
"int":
      
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case 
"double":
      
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case 
"date":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;
    case 
"defined":
      
$theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
      break;
  }
  return 
$theValue;
}
}

$maxRows_Recordset1 10;
$pageNum_Recordset1 0;
if (isset(
$_GET['pageNum_Recordset1'])) {
  
$pageNum_Recordset1 $_GET['pageNum_Recordset1'];
}
$startRow_Recordset1 $pageNum_Recordset1 $maxRows_Recordset1;

$colname_Recordset1 "-1";
if (isset(
$_POST['buscar'])) {
  
$colname_Recordset1 $_POST['buscar'];
}
mysql_select_db($database_Pharma$Pharma);
$query_Recordset1 sprintf("SELECT * FROM usuarios, login ON  usuarios.curp = login.curp WHERE Apellido_P LIKE %s AND login.Nivel = 'SUPERVISOR,USER'"GetSQLValueString("%" $colname_Recordset1 "%""text"));
$query_limit_Recordset1 sprintf("%s LIMIT %d, %d"$query_Recordset1$startRow_Recordset1$maxRows_Recordset1);
$Recordset1 mysql_query($query_limit_Recordset1$Pharma) or die(mysql_error());
$row_Recordset1 mysql_fetch_assoc($Recordset1);

if (isset(
$_GET['totalRows_Recordset1'])) {
  
$totalRows_Recordset1 $_GET['totalRows_Recordset1'];
} else {
  
$all_Recordset1 mysql_query($query_Recordset1);
  
$totalRows_Recordset1 mysql_num_rows($all_Recordset1);
}
$totalPages_Recordset1 ceil($totalRows_Recordset1/$maxRows_Recordset1)-1;
?>
O aquí, solo la parte del select:

Código PHP:
SELECT FROM usuarioslogin 
ON  usuarios
.curp login.curp 
WHERE Apellido_P LIKE 
%AND login.Nivel 'SUPERVISOR,USER' 
Pero al hacerlo así, me da este error:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ON usuarios.curp = login.curp WHERE Apellido_P LIKE '%-1%' AND login.Nivel = 'S' at line 1

Intenté reemplazarlo por el siguiente código, y aunque no me marca ningún error, tampoco me trae resultados:

Código PHP:
SELECT *
FROM usuarioslogin
WHERE usuarios
.curp login.curp AND login.Nivel 'SUPERVISOR,USER' and  Apellido_P LIKE %colname
Gracias.

Última edición por Karen_mBrK; 20/02/2014 a las 11:21
  #2 (permalink)  
Antiguo 20/02/2014, 12:17
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: problemas con select.

Para hacer la búsqueda con el operador LIKE de MySQL y la función sprintf de PHP, el especificador de tipo debe ser escrito de la siguiente manera:

Código PHP:
Ver original
  1. sprintf("SELECT * FROM tabla WHERE campo LIKE '%%%s%%'", $variable);

Como verás, escapo los signos de porcentaje que se colocan cada vez que se utiliza este operador con otro signo de porcentaje para que no entren en conflicto con el del especificador de tipo, pues si los colocas a la derecha de la coma, es decir, en donde van las variables, ya no estarás aplicando dichos signos de porcentaje a la sentencia SQL, por eso se produce el error.

Por otro lado, esto también es incorrecto:

Código MySQL:
Ver original
  1. login.Nivel = 'SUPERVISOR,USER'

Si quieres buscar la coincidencia con alguno de ambos valores, hazlo con dos condiciones:

Código MySQL:
Ver original
  1. login.Nivel = 'SUPERVISOR' OR login.Nivel = 'USER'

O con el operador de sub-consulta IN:

Código MySQL:
Ver original
  1. login.Nivel IN ('SUPERVISOR','USER')

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 20/02/2014, 12:36
 
Fecha de Ingreso: enero-2014
Mensajes: 127
Antigüedad: 10 años, 2 meses
Puntos: 2
Respuesta: problemas con select.

Si, había intentado esto:
Código PHP:
login.Nivel 'SUPERVISOR' OR login.Nivel 'USER' 
Y no me había dado resultado, pero por otro lado, no me sabía esta:
Código PHP:
login.Nivel IN ('SUPERVISOR','USER'
Lo he probado. ¡Y me ha salido! Te lo agradezco mucho, y no sé si puedas echarme una mano, por acá también: http://www.forosdelweb.com/f18/variables-sesion-1091771/ Y pues en caso de que no, de todas formas te agradezco mucho. :D
  #4 (permalink)  
Antiguo 20/02/2014, 12:42
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: problemas con select.

Seguramente no te resultó con el OR porque no separaste esas dos condiciones del resto de la sentencia. Como veo que tienes otra condición más (la del LIKE), debiste hacerlo así:

Código MySQL:
Ver original
  1. SELECT * FROM usuarios, login  
  2. ON  usuarios.curp = login.curp  
  3. WHERE Apellido_P LIKE '%%%s%%' AND (login.Nivel = 'SUPERVISOR' OR login.NIVEL = 'USER')

De ese modo, evalúas una respuesta con otra (la del LIKE con el resultado del OR) y no tres condiciones distintas. Esto en tablas de verdad, sería así:

Código Tabla de Verdad:
Ver original
  1. p Y (q OR r)

De cualquier forma, con IN es mucho más práctico.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 20/02/2014, 12:51
 
Fecha de Ingreso: enero-2014
Mensajes: 127
Antigüedad: 10 años, 2 meses
Puntos: 2
Respuesta: problemas con select.

Tienes razón, me falto separarlas, si sentí que le faltaba algo, ya que así tal cual, daba a entender condiciones diferentes a las que necesitaba, pero bueno, ahora ya sé usar el IN. xD

Etiquetas: mysql, select, sql, usuarios
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 11:52.