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

encontrar aguja en pajar con mysql

Estas en el tema de encontrar aguja en pajar con mysql en el foro de Mysql en Foros del Web. Tengo una duda sobre los selectores mysql, a la hora de elegir una fila. Teniendo estos contenidos: 19 considerar # comparar con las estrellas 21,40,32,15 ...
  #1 (permalink)  
Antiguo 10/11/2009, 13:40
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
encontrar aguja en pajar con mysql

Tengo una duda sobre los selectores mysql, a la hora de elegir una fila.

Teniendo estos contenidos:

19 considerar # comparar con las estrellas 21,40,32,15
17 recordar # del latin: volver al corazon 28, 14, 15, 20
54 pensare # Pensar viene de pesar. 28,16,19

Es decir, teniendo en la columna cinco algo asi como un array (sin serlo), puedo usar SELECT WHERE para filtrar mi seleccion, pero no declarando todo lo que hay en ese pseudo array sino solo una de las cifras?

Algo asi:

$palabras = mysql_query("SELECT palabra FROM palabras WHERE usuarios='28'");
  #2 (permalink)  
Antiguo 10/11/2009, 13:45
Avatar de omar1977  
Fecha de Ingreso: abril-2006
Mensajes: 178
Antigüedad: 18 años
Puntos: 4
Respuesta: encontrar aguja en pajar con mysql

Cita:
$palabras = mysql_query("SELECT palabra FROM palabras WHERE usuarios='28'");
$palabras = mysql_query("SELECT palabra FROM palabras WHERE usuarios LIKE '%28%'");
__________________
no hay nadie que sea tan inutil, por ultimo sirve como mal ejemplo
  #3 (permalink)  
Antiguo 10/11/2009, 13:46
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: encontrar aguja en pajar con mysql

Genial! Si funciona me ahorraste rediseñar las tablas.

Editado: SIII! Funciona. Va punto.
  #4 (permalink)  
Antiguo 10/11/2009, 14:33
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: encontrar aguja en pajar con mysql

Mayid,
eso no puede funcionarte; imagina que tuvieras 281,
verás que también te lo encuentra.
Las dos soluciones son
SELECT * FROM tabla WHERE FIND_IN_SET(28,campo) > 0;

O también
SELECT * FROM tutabla WHERE campo REGEXP '[[:<:]]28[[:>:]]'
en este caso con expresión regular, algo menos eficiente
  #5 (permalink)  
Antiguo 10/11/2009, 15:04
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: encontrar aguja en pajar con mysql

Mh... gracias por avisar. Lo que no entiendo es como es que aqui se encuentra solo 28 y no 281:

Cita:
SELECT * FROM tabla WHERE FIND_IN_SET(28,campo) > 0;
Pero supongo que eso esta mas que pensado, y que las comas son reconocidas en la busqueda de subcadenas. Aqui encontre un ejemplo:

http://www.conclase.net/mysql/curso/...un=FIND_IN_SET
  #6 (permalink)  
Antiguo 10/11/2009, 15:18
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: encontrar aguja en pajar con mysql

Funcionan diferente, y lo de @jurena es mas acertado:

Cita:
SELECT * FROM tabla WHERE FIND_IN_SET(28,campo) > 0;
Hice la prueba con el 281, y lo de @omar1977 da resultados ambigüos, es cierto.

Mi problema ahora ya es en cuanto a espaciado, y creo solucionarlo con PHP. No es lo mismo " 28" que "28" cuando devuelvo valores con PHP.

GRACIAS!!!

Última edición por mayid; 10/11/2009 a las 15:42
  #7 (permalink)  
Antiguo 11/11/2009, 00:33
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: encontrar aguja en pajar con mysql

Para eso usa trim tras usar explode y quita el espacio por delante y detrás, pero eso debes preguntarlo en el foro PHP.
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:05.