MySQL - MYSQL - USAR RESULTADOS PARA SEGUIR BUSCANDO

 
Vista:
sin imagen de perfil

MYSQL - USAR RESULTADOS PARA SEGUIR BUSCANDO

Publicado por Emerson (4 intervenciones) el 30/04/2018 17:45:12
Hola a todos.

Estoy buscando una solución a este problema, espero que me puedan ayudar.

"Hago una consulta a mi base de datos y quiero usar este resultado, para que me muestre mas resultados".
Ejm. (Vendo baterias de autos, busco por marca y modelo, y me muestra 1 bateria que coinciden exactamente con lo que busco, pero se que hay mas de 10 baterias que son (compatibles) y me deberia mostrar como alternativas).

Dejo como referencia mi codigo, solo me muestra el producto exacto, pero hay mas productos compatibles...

" SELECT * FROM t_autos_baterias join t_productos
where t_autos_baterias.CODE_MARCA='3' and t_autos_baterias.CODE_MODELO='2' and t_autos_baterias.BATERIA = t_productos.PRODUCTO "

El resultado es una sola bateria, sabiendo que tengo como 10 opciones de baterias.

Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

MYSQL - USAR RESULTADOS PARA SEGUIR BUSCANDO

Publicado por leonardo_josue (1 intervención) el 30/04/2018 18:37:52
Hola Emerson:

¿y cómo determinas que una búsqueda es "compatible" con otra? es decir, no nos dices cuál es la estructura de tu tabla, tampoco nos pones datos de ejemplo ni nos dices qué criterios utilizas para definir cuales son los otros registros que te gustaría incluir en la condición.

Lo que quieres hacer se denomina BÚSQUEDAS POR APROXIMACIÓN y hay muchas técnicas para hacerlas, pero dependerá de cómo tienes tu información y los criterios que quieras incluir en la búsqueda.

Postea la estructura de tus tablas, pon algunos datos de ejemplo y a partir de esos datos dinos qué es lo que esperas obtener como salida de acuerdo al criterio de búsqueda.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

MYSQL - USAR RESULTADOS PARA SEGUIR BUSCANDO

Publicado por Emerson (4 intervenciones) el 30/04/2018 19:58:38
Hola Leo, gracias por responder, esta es mi estructura de tablas:
baterias

Y contenido de mi tabla productos.
baterias-contenido

Ahora el campo que nos dice si es compatible es el campo "EQUIVALENTE" esta en tabla productos.

EJEMPLO:
- Quiero saber que batería usa mi auto, solo necesitamos saber la marca del auto y modelo. (Mitsubishi / Modelo: Montero).
- Selecciono estos datos del formulario que tengo y buscamos.
- Por ahora solo aparece una bateria de una marca X que tengo, pero hay compatibles en varias marcas. Y queremos que aparezca esos compatibles.

En la imagen de "baterias-contenido.jpg" nos muestra la informacion.
NOTA: En mi consulta que estoy usando solo me muestra 1 resultado pero tambien muestra que tiene un compatible "EQUIVALENTE". Como podemos hacer que use ese dato obtenido (EQUIVALENTE) y busque si hay mas datos similares.

El resultado ideal: Nos deberia mostrar la bateria exacta + una lista de baterias compatibles.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

MYSQL - USAR RESULTADOS PARA SEGUIR BUSCANDO

Publicado por leonardo_josue (414 intervenciones) el 30/04/2018 20:48:45
Hola de nuevo Emerson:

De acuerdo a lo que planteas, creo que tienes un mal planteamiento de tablas, ya que según entiendo un producto puede tener n productos equivalentes, entonces, en lugar de tener un campo de equivalencias deberías de tener UNA TABLA de equivalencias... es decir, en lugar de tenr algo así:

1
2
3
4
5
6
7
8
9
10
11
mysql> SELECT * FROM productos;
+-------------+-----------------+-------+--------+-------------+
| id_producto | descripcion     | marca | modelo | equivalente |
+-------------+-----------------+-------+--------+-------------+
|           1 | producto uno    |     1 |      1 |           0 |
|           2 | producto dos    |     1 |      2 |           1 |
|           3 | producto tres   |     1 |      3 |           1 |
|           4 | producto cuatro |     1 |      4 |           2 |
|           5 | producto cinco  |     1 |      5 |           0 |
+-------------+-----------------+-------+--------+-------------+
5 rows in set (0.01 sec)

deberías tener dos tablas, más o menos así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
mysql> SELECT * FROM productos;
+-------------+-----------------+-------+--------+
| id_producto | descripcion     | marca | modelo |
+-------------+-----------------+-------+--------+
|           1 | producto uno    |     1 |      1 |
|           2 | producto dos    |     1 |      2 |
|           3 | producto tres   |     1 |      3 |
|           4 | producto cuatro |     1 |      4 |
|           5 | producto cinco  |     1 |      5 |
+-------------+-----------------+-------+--------+
5 rows in set (0.01 sec)
 
mysql> SELECT * FROM equivalencias;
+---------------+-------------+-------------------------+
|id_equivalencia| id_producto | id_producto_equivalente |
+---------------+-------------+-----------------+-------+
|              1|           1 |                        2|
|              2|           1 |                        3|
|              3|           1 |                        4|
|              4|           2 |                        5|
|              5|           3 |                        1|
+---------------+-------------+-----------------+-------+
5 rows in set (0.01 sec)

De esta manera no importa si un producto está relacionado con 1, 4, 10, o mil productos... simplemente agregas más registros a la tabla... si por el contrario un producto NO TIENE NINGÚN PRODUCTO RELACIONADO, entonces simplemente NO APARECE EN ESTA TABLA, evitando tener campos con null o con el valor de 0 como tienes en tu ejemplo. Esto normaliza tus tablas además de dar más flexibilidad. Si puedes cambiar tu modelo te sugiero que lo hagas y te evites problema futuros.

Ahora bien, si te es imposible cambiar tu modelo, entonces tienes varias opciones para resolver el problema. voy a suponer que tu tabla tiene más o menos esta información:

1
2
3
4
5
6
7
8
9
10
11
mysql> SELECT * FROM productos;
+-------------+-----------------+-------+--------+-------------+
| id_producto | descripcion     | marca | modelo | equivalente |
+-------------+-----------------+-------+--------+-------------+
|           1 | producto uno    |     1 |      1 |           0 |
|           2 | producto dos    |     1 |      2 |           1 |
|           3 | producto tres   |     1 |      3 |           1 |
|           4 | producto cuatro |     1 |      4 |           2 |
|           5 | producto cinco  |     1 |      5 |           0 |
+-------------+-----------------+-------+--------+-------------+
5 rows in set (0.00 sec)

entonces, si buscaras la marca = 1 y el modelo = 3 obtienes el siguiente resultado:

1
2
3
4
5
6
7
8
9
mysql> SELECT *
    -> FROM productos
    -> WHERE (marca = 1 AND modelo = 3);
+-------------+---------------+-------+--------+-------------+
| id_producto | descripcion   | marca | modelo | equivalente |
+-------------+---------------+-------+--------+-------------+
|           3 | producto tres |     1 |      3 |           1 |
+-------------+---------------+-------+--------+-------------+
1 row in set (0.00 sec)

De aquí se observa que este producto tiene un equivalente, por lo tanto, para mostrar este equivalente lo podrías hacer con condiciones tipo OR o con UNION's:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
mysql> SELECT *
    -> FROM productos
    -> WHERE (marca = 1 AND modelo = 3)
    -> OR
    -> id_producto = ( SELECT equivalente
    ->                 FROM productos
    ->                 WHERE (marca = 1 AND modelo = 3));
+-------------+---------------+-------+--------+-------------+
| id_producto | descripcion   | marca | modelo | equivalente |
+-------------+---------------+-------+--------+-------------+
|           1 | producto uno  |     1 |      1 |           0 |
|           3 | producto tres |     1 |      3 |           1 |
+-------------+---------------+-------+--------+-------------+
2 rows in set (0.01 sec)
 
mysql> SELECT *
    -> FROM productos
    -> WHERE (marca = 1 AND modelo = 3)
    -> UNION
    -> SELECT *
    -> FROM productos
    -> WHERE id_producto = ( SELECT equivalente
    ->                 FROM productos
    ->                 WHERE (marca = 1 AND modelo = 3));
+-------------+---------------+-------+--------+-------------+
| id_producto | descripcion   | marca | modelo | equivalente |
+-------------+---------------+-------+--------+-------------+
|           1 | producto uno  |     1 |      1 |           0 |
|           3 | producto tres |     1 |      3 |           1 |
+-------------+---------------+-------+--------+-------------+
2 rows in set (0.00 sec)

dale un vistazo para ver si te sirve.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

MYSQL - USAR RESULTADOS PARA SEGUIR BUSCANDO

Publicado por Emerson (4 intervenciones) el 02/05/2018 18:23:39
Gracias por la info, y si era mejor separar la información y cree una tabla de equivalencias aparte. y me facilito realizar mis consultas.

Saludos
Emerson.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar