Foros del Web » Programando para Internet » PHP »

Comparar filas con datos simliares php y mysql

Estas en el tema de Comparar filas con datos simliares php y mysql en el foro de PHP en Foros del Web. Hola, Quiero haceros una consulta. La hago directamente con el ejemplo. Pongamos que tenemos en una BBDD de 1 sola columna llamada X, da igual, ...
  #1 (permalink)  
Antiguo 28/10/2009, 09:46
 
Fecha de Ingreso: octubre-2008
Mensajes: 177
Antigüedad: 15 años, 6 meses
Puntos: 1
Comparar filas con datos simliares php y mysql

Hola,

Quiero haceros una consulta. La hago directamente con el ejemplo.

Pongamos que tenemos en una BBDD de 1 sola columna llamada X, da igual, con diversas filas que pueden ser pedidos pongamos:

Fila 0: coles y nabos
Fila 1: tomates, coles y nabos
Fila 2: coles, nabos y zanahorias
Fila 3: coles, zanahorias y patatas
Fila 4: patatas, lentejas y nabos
Fila 5: nabos, coles y chorizos
Fila 6: coles, chorizos, nabos y lechugas
Fila 7: garbanzos, apio, y nabos
Fila 8: coles, apio y sandías
... así hasta 2.000.000 pedidos

Vale, la cuestión es que quisiera saber cuál es la mejor manera de decirle mediante PHP que mire en la BBDD (teniendo en cuenta que son 2.000.000 depedidos, no 10 ni 20) todos los pedidos en los que están los mismos alimentos que en la Fila 0, que puede ser una Fila ejemplo o como querais llamarle.

Se puede hacer que mediante Strings le digamos que los 2 alimentos de la Fila 0 son 'coles' y también son 'nabos'. Entonces, ¿qué función es la mejor para decirles que haga esa búsqueda, y que da igual si además hay chorizos o apio o lo que sea, pero que nos saque las filas en las que estén los 2 ingredientes de la Fila 0?

Espero haberme explicado correctamente. Y gracias por adelantado chic@s!
  #2 (permalink)  
Antiguo 28/10/2009, 10:19
Avatar de Fairy_Boy  
Fecha de Ingreso: octubre-2009
Ubicación: Kokiri Forest
Mensajes: 235
Antigüedad: 14 años, 6 meses
Puntos: 5
Respuesta: Comparar filas con datos simliares php y mysql

Hola sitoatic.
segun lo que te etendi, deseas buscar datos similares.
pordias leer un poco sobre MATCH AGAINST
para realizar una busqueda diferente (claro que tendrias que tener algun campo como FULLTEXT) para realizar dicha busqueda.
ojala te sirva de algo esto MATCH AGAINST
Saludos!
  #3 (permalink)  
Antiguo 28/10/2009, 10:28
 
Fecha de Ingreso: diciembre-2007
Mensajes: 927
Antigüedad: 16 años, 4 meses
Puntos: 12
Podrias decir para que la usas. Ya que esta mas que explicar seria hacerla y puedo ayudarte, pero tratare de explicarte mi idea. Te recomiendo que la hagas y luego la optimizes pero es claro que se tardara un poco ya que deve leer las 2.000.000 de lineas.

La idea es:

Leer las 2.000.000 de linea [se tarda aprox unas 2 o 3horas, depende cuanto mida]. Despues de eso cada registro deveras hacer que lo parte en , y en el ultimo el y [Esto lo explico mas abajo]. Despues deveras comparar una por uno y ya con eso podrias saber ye n un array anotar los que hallas usado.

Mira para poder poner el las filas usarias variables variables y un explode
Código PHP:
do{
$num  0;//numero de fila
$fila explode(','$row[0])
//despues aqui le volvemos a romper el y
//numero = el numero que se puso anteriormente
$fila_2 explode('y'$row[0]);

//ahora ya tendriamos separado en 2 partes
//solo falta juntarlos y comparar
//checamos que tan grande es fila y despues le agregamos uno mas.
$fila[count($fila)] = $fila_2[1];

//aqui solo creamos un do...while y comparamos uno por uno que algunos seran 2 y //otros tres, claro uno por uno de cada fila.
//Al comprar si se encuentra a lli las palabras pues solo escribes el numero de fila
//en el cual se encuentra.

$num++;
}while(
$row mysql_fetch_array($result));

//Despues solo volvemos a llamar los datos que se han pedido que se grabaron anteriorente en el array y ya los tienes :D
//esto se pone en un for, do.while o lo que sea de loop 
Espero poder haberte ayudado

Perdon por doble post pero la idea de Fairy es mejor la he leido y creo que es exactamente lo que necesitas xD

salu2
  #4 (permalink)  
Antiguo 28/10/2009, 10:42
Avatar de kike00  
Fecha de Ingreso: febrero-2005
Ubicación: El Salvador
Mensajes: 180
Antigüedad: 19 años, 2 meses
Puntos: 7
Respuesta: Comparar filas con datos simliares php y mysql

o.O que "complicado" se puso, en mi opinion la solucion mas optima deberia de haber sido un mejor diseño en la base de datos, ya que casi siempre que un campo contiene varios datos es mejor crear una tabla especial para ese campo en el que cada dato sea un registro en la nueva tabla.....

en vez de tener
Tabla: pedidos
ID - items
[0] - coles y nabos
[1] - tomates, coles y nabos
[n] - ....

podrias tener

Tabla: Pedidos
ID - (Otros campos...)
[0] - ...
[1] - ...
[n] - ...

Tabla: Items
ID - ID_Pedidos - Item
[0] - 0 - coles y nabos
[1] - 1 - tomates
[2] - 1 - coles y nabos


O tambien tener una sola tabla con el listado de items, en otra el listado de pedidos y en otra una tabla como Items_por_pedido en donde a cada pedido una serie de items.....

Yo se que esto no soluciona directamente tu problema actual pero te podria ayudar en un futuro, haciendo un diseño correcto de la base de datos, te ayudara a que tu aplicacion sea mas facil de desarrolla aparte que realizar tareas como consultas será mas fácil y óptimo

saludos
  #5 (permalink)  
Antiguo 28/10/2009, 10:53
 
Fecha de Ingreso: octubre-2008
Mensajes: 177
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Comparar filas con datos simliares php y mysql

@Faiy_Boy Oh, pues lo del MATCH() AGAINST() creo que me va a servir muchísimo, así que muchas gracias!

En este rato había pensado en utilizar WHERE EXISTS, pero me parece mucho más rápido MATCH() AGAINST() en las pruebas que he llevado a cabo directamente con phpmyadmin.

@Edig Gracias de todos modos! Es para llevar a cabo una especie de buscador y comparador vertical de coches.

@kike00 Tienes razón, lo que pasa que los datos vienen como vienen, pues se extraen de XML.


Si me vuelvo a encontrar problema aquí lo comentaré, porque no había probado el MATCH() AGAINST() nunca, y al hacer la prueba con 1 simple condición no he tenido problema, pero quiero añadir 2 o más, como era el ejemplo, pero ya lo iré sacando.

He tenido que utilizar el índice FULLTEXT que no tenía, y perfecto.

Gracias a todos!
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 00:41.