Foros del Web » Programando para Internet » PHP »

AYUDA!!!POR FAVOR CONSULTA MULTITABLA SQL HACIENDO USO DE LIKE ....Ayudenme

Estas en el tema de AYUDA!!!POR FAVOR CONSULTA MULTITABLA SQL HACIENDO USO DE LIKE ....Ayudenme en el foro de PHP en Foros del Web. Bueno ante todo un saludo a los visitantes de este tema. . Tengo en mi web (una tienda virtual) un buscador el cual realizara búsquedas ...
  #1 (permalink)  
Antiguo 08/09/2008, 17:06
Avatar de starmark  
Fecha de Ingreso: junio-2008
Ubicación: Venezuela
Mensajes: 64
Antigüedad: 15 años, 10 meses
Puntos: 0
AYUDA!!!POR FAVOR CONSULTA MULTITABLA SQL HACIENDO USO DE LIKE ....Ayudenme

Bueno ante todo un saludo a los visitantes de este tema. . Tengo en mi web (una tienda virtual) un buscador el cual realizara búsquedas en una db donde almaceno 3 tablas, art_deportivos, art.musicales, otros ..

En el buscador como dije ofrezco opciones de buscar en las distintas tablas y una opción que buscara en las 3 tablas (AQUI EL PROBLEMA) tengo el siguiente select.. .
<select name="busc">
<option>TODOS</option>
<option>MUSICALES</option>
<option>DEPORTIVOS</option>
<option>OTROS</option>
</select>

Cuando el usuario desea buscar en las tablas art_deportivos, art.musicales u en la tabla otros .. NO TENGO NIGUN PROBLEMA

El problema es cuando el usuario marca en el select la opción todos, que debe buscar en las 3 tablas ..

No tengo bien claro como debe ser esta consulta ..

Algo que debo decir es que en las 3 tablas tengo los cuatro campos repetidos no se q tenga esto que ver, lo que pasa es que como es un inventario, entonces no veo otra forma de almacenarlos en la db, aquí os pongo la estructura de mis tablas

CREATE TABLE `deportivos` (
`idproducto` varchar(30) NOT NULL,
`descripcion` text NOT NULL,
`cantidad` int(20) default NULL,
`precio` float NOT NULL,
PRIMARY KEY (`idproducto`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `musicales` (
`idproducto` varchar(30) NOT NULL,
`descripcion` text NOT NULL,
`cantidad` int(20) default NULL,
`precio` float NOT NULL,
PRIMARY KEY (`idproducto`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `otros` (
`idproducto` varchar(30) NOT NULL,
`descripcion` text NOT NULL,
`cantidad` int(20) default NULL,
`precio` float NOT NULL,
PRIMARY KEY (`idproducto`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

E intentado varias querys que me dan como 70000 mil resultados :: . Por favor ayúdenme en esto;

Si no me explique bien solo diganme y explico mejor .. Gracias
  #2 (permalink)  
Antiguo 08/09/2008, 17:10
Avatar de jcxnet  
Fecha de Ingreso: octubre-2005
Ubicación: Perú
Mensajes: 784
Antigüedad: 18 años, 6 meses
Puntos: 56
Respuesta: AYUDA!!!POR FAVOR CONSULTA MULTITABLA SQL HACIENDO USO DE LIKE ....Ayuden

Hola.
pues creo que deberías tener una sola tabla de Productos y un campo que identifique el tipo de producto, así podrías hacer el tipo de consulta que necesitas.
__________________
►I'm a devil on the run ♂
Jcxnet.com
*Keep It Simple **
  #3 (permalink)  
Antiguo 08/09/2008, 17:20
Avatar de starmark  
Fecha de Ingreso: junio-2008
Ubicación: Venezuela
Mensajes: 64
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: AYUDA!!!POR FAVOR CONSULTA MULTITABLA SQL HACIENDO USO DE LIKE ....Ayuden

Cita:
Iniciado por jcxnet Ver Mensaje
Hola.
pues creo que deberías tener una sola tabla de Productos y un campo que identifique el tipo de producto, así podrías hacer el tipo de consulta que necesitas.
Jejee gracias en un principio asi lo tenia, soy un tesista y mi tutora me dijo que normalizara la tabla porque no le parecia que todo el inventario estubiera todo en una misma tabla ¬¬
  #4 (permalink)  
Antiguo 08/09/2008, 19:41
 
Fecha de Ingreso: agosto-2008
Mensajes: 12
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: AYUDA!!!POR FAVOR CONSULTA MULTITABLA SQL HACIENDO USO DE LIKE ....Ayuden

Hola. Estás seguro que necesitas partir tu tabla? Me parece mas correcto tener una sola tabla y esto no tiene porque ir en contra las reglas de normalización. De todas formas si tienes que hacerlo con las 3 tablas lo primero es hacer una consulta tipo UNION SELECT....

SELECT campo1, campo2, campo3, campo4 FROM tabla1
UNION
SELECT campo1, campo2, campo3, campo4 FROM tabla2
UNION
SELECT campo1, campo2, campo3, campo4 FROM tabla3;

esto te dará como resultado el equivalente de juntar en una sola tabla con 4 campos los registros de la tabla2 detras de los de la tabla1 y así sucesivamente con cuantas quieras.
espero que te ayude
  #5 (permalink)  
Antiguo 08/09/2008, 20:47
Avatar de jcxnet  
Fecha de Ingreso: octubre-2005
Ubicación: Perú
Mensajes: 784
Antigüedad: 18 años, 6 meses
Puntos: 56
Respuesta: AYUDA!!!POR FAVOR CONSULTA MULTITABLA SQL HACIENDO USO DE LIKE ....Ayuden

Cita:
Jejee gracias en un principio asi lo tenia, soy un tesista y mi tutora me dijo que normalizara la tabla porque no le parecia que todo el inventario estubiera todo en una misma tabla ¬¬
Pues no se que regla de normalización permite varias tablas con los mismos campos, será alguna de la que no me enteré? (perdón por el sarcasmo, pero no lo puedo evitar :) ) pero la regla indica que deberías tener una tabla de productos y otra de los tipos, y a ver si tu tutora revisa un poco de que se trata todo esto, cuando te refieres a "todo el inventario", solo son los productos? o hay más aún ?.. quizás si nos muestras un pantallazo del diseño de tu base de datos podamos pulirla un poco ;)
__________________
►I'm a devil on the run ♂
Jcxnet.com
*Keep It Simple **
  #6 (permalink)  
Antiguo 08/09/2008, 21:46
Avatar de MariaElenaSolís22  
Fecha de Ingreso: agosto-2006
Ubicación: Mty., Nuevo León, Méx.
Mensajes: 88
Antigüedad: 17 años, 8 meses
Puntos: 0
.
podrias tener el inventario en una sola tabla y le agregas un campo tipo_articulo
A) supongamos que los productos son divididos en categorias:
IdCat DescripcionCategoria
1 Electronica
2 Linea Blanca
3 Muebles

esta seria la tabla tipo de articulos o categorias_articulos
B) Ahora en tu tabla de inventario_articulos tienes
con los datos correspondientes al producto
IdProducto IdTipoArt Descripcion PrecioUnitario Costo Etc.
asi al registrar cada producto pues en tu inventario tienes a que tipo de articulo o categoria de articulo te refieres

podrias poner una consulta en un select con php:

function consultar_categoria($IdCat){

$cad_cat="SELECT * FROM categorias";
$q_cad_cat=mysql_query($cad_cat) or die(mysql_error());
$categ=mysql_num_rows($q_cad_cat);


echo "<select name='Categoria' onChange='cat_id(Categoria);'>"; aqui al seleccionar una opcion en el select te haria la consulta dinamicamente desde la tabla
echo "<option value='8'>Todas","</option>";
while ($row3=mysql_fetch_array($q_cad_cat,MYSQL_NUM))
{
$id_cat=$row3['0']; // aqui se obtiene el id y la descripcion de cada opcion
$cat=$row3['1']; // en el value de la opcion tienes el id y el nombre de cada opcion como se muestra abajo

?>
<option value="<?php echo $id_cat;?>"<?php if($_REQUEST['Categoria']==$id_cat) { echo "selected"; }?>><?php echo $cat;?></option><?php



}
//esto lo pones antes de la etiqueta html
//y en el body llamas la funcion entre tags de <?php ?>
//



?>


</select>

Tambien debes poner una funcion de javascript que mande llamar esa funcion de cat id que esta en el onchange del select, esto va despues del </head> para que no tengas problemas:

<script>
function cat_id(Categoria)
{


var Categoria =Categoria.value; // obtiene el valor de la opcion seleccionada del select
location.href='?Categoria='+Categoria; // envia a la url el valor a una variable que se llama Categoria
document.busqueda_per.nIdCat.value=Categoria; // busqueda_per es el :
<form name="busqueda_per" action="BuscPer.php" method="get" enctype="multipart/form-data">

//aqui llamas la funcion de consulta que genera el select
<?php

consultar_categoria($idCat);
?>


</form>


cuando tengas esto y hagas la prueba el select te enviara por Url Categoria = el id de la opcion seleccionada
en base a esto puedes consultar en tu tabla de inventarios puede ser que en base a eso se ejecute otra funcion o consulta espero haberte ayudado en algo.

Última edición por MariaElenaSolís22; 08/09/2008 a las 22:17
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 02:30.