Foros del Web » Programando para Internet » PHP »

Unir dos tablas con php

Estas en el tema de Unir dos tablas con php en el foro de PHP en Foros del Web. Bien, les comento, hace tiempo navego por la web y no puedo dar con lo que necesito. Tengo que unir dos tablas que dejo a ...
  #1 (permalink)  
Antiguo 04/12/2012, 11:42
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 14 años, 10 meses
Puntos: 2
Unir dos tablas con php

Bien, les comento, hace tiempo navego por la web y no puedo dar con lo que necesito.
Tengo que unir dos tablas que dejo a continuación:

CREATE TABLE IF NOT EXISTS `categorias` (
`id_categoria` bigint(100) NOT NULL AUTO_INCREMENT,
`nombre_categoria` varchar(255) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL,
PRIMARY KEY (`id_categoria`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

INSERT INTO `categorias` (`id_categoria`, `nombre_categoria`) VALUES
(1, 'Especias y condimentos'),
(2, 'Deshidratados'),
(3, 'Reposteria'),
(4, 'Productos para chacinados'),
(5, 'Productos para milanesas'),
(6, 'Insumos para Chacinados'),
(7, 'Frutas Desecadas');

-- --------------------------------------------------------

CREATE TABLE IF NOT EXISTS `productos` (
`id_producto` bigint(100) NOT NULL AUTO_INCREMENT,
`nombre_producto` text NOT NULL,
`categoria_padre` int(11) NOT NULL,
PRIMARY KEY (`id_producto`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

INSERT INTO `productos` (`id_producto`, `nombre_producto`, `categoria_padre`) VALUES
(1, 'Ají molido', 1),
(2, 'Albahaca seca', 1);


En fin lo que necesito es que se muestre esto en una sola página en forma de árbol. Por ejemplo:

Especias y condimentos
--- Ají molido
--- Albahaca seca
Deshidratados
Etc...

Bueno, como siguiente aquí esta mi config.php que conecta a la base de datos:

Código PHP:
<?php
function conectarse (){
    if (!(
$link=mysql_connect ('localhost''root','')))
    {
    echo 
"No se ha podido conectar a la base de datos";
    exit();
    }
    if (! 
mysql_select_db ('basededatos'$link)){
    echo 
"No se puede conectar a la tabla de la base de datos";
    exit();
    }
    return 
$link;
    }
?>
Por lo pronto he tratado de hacer que funcione pero no he podido hacer nada.
Necesito por ejemplo que se escriba de esta manera en el código.

Código HTML:
<dt>Especias y condimentos</dt>
<dd>
<span>
<p>Ají molido</p>
<p>Albahaca seca</p>
</span>
</dd>
<dt>Deshidratados</dt>
<dd>
<span>
<p>Ají molido</p>
<p>Albahaca seca</p>
</span>
</dd> 

Por favor a ver si me pueden ayudar... ando liadisimo
  #2 (permalink)  
Antiguo 04/12/2012, 14:19
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Unir dos tablas con php

Te recomiendo siempre dar tiempo, ya que lo posteaste hoy, no hay necesidad de desesperarse. En sí no es dificil, pero lo puedes hacer en una sola consulta, te recomiendo que leas sobre INNER JOIN, LEFT JOIN Y RIGHT JOIN en MySQL.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 04/12/2012, 14:48
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Unir dos tablas con php

si, lei sobre eso pero no logro hacer qu funcionecomo quiero. Osea que muestre el titulo de categoria y debajo todos los asociados a ese etc...
  #4 (permalink)  
Antiguo 04/12/2012, 15:03
Avatar de hschimpf  
Fecha de Ingreso: junio-2009
Ubicación: in the World Wide Web
Mensajes: 140
Antigüedad: 14 años, 10 meses
Puntos: 17
Respuesta: Unir dos tablas con php

Debes realizar tu consulta como te dijo abimaelrc. Ademas de ello, al recorrer el resultset obtenido, tienes que tener una variable en la cual verifiques el cambio de categoria y al capturar el cambio, imprimies la cabecera con los datos de la categoria.
Esto se llama Corte de Control.

Suerte!
__________________
Hermann D. Schimpf
Visita mis repositorios de:
Clases Java: http://code.google.com/p/javaclassesrepository/
Clases PHP: http://code.google.com/p/phpclassesrepository/
  #5 (permalink)  
Antiguo 04/12/2012, 20:11
 
Fecha de Ingreso: mayo-2009
Mensajes: 166
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Unir dos tablas con php

me pueden ayudar un poco con código? soy muy nuevo en esto:

Llegue a hacer esto:

$query = mysql_query('select * from categorias where id_categoria="1"');
while($row = mysql_fetch_array($query)){
$id_categoria = $row['id_categoria'];
echo $id_categoria;
/* selecionamo los productos que tenga que ver con el id_categoria */
$query2 = mysql_query('select * from producto where categoria_padre="'.$id_categoria.'"');
while($rows2 = mysql_fetch_array($query2)) {
echo $rows['nombre_producto'];
}
}

Pero no queda como quiero.
  #6 (permalink)  
Antiguo 05/12/2012, 09:34
 
Fecha de Ingreso: mayo-2012
Mensajes: 26
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: Unir dos tablas con php

hola rakshaka, con LEFT JOIN puedes juntar los resultados de ambas tablas (como dijo abimaelrc), mira te dejo a continuacion unos pasos,
si se me fue alguna coma o algo demas, perdon, pero no lo revise
le coloque comentarios para q puedas entenderlo un poco, saludos espero te sirva.

Código PHP:
Ver original
  1. <?php
  2. //$conexion modifica la funcion q tienes, no dejes espacios aqui conectarse   (), agrupalo conectarse()
  3. $conexion= conectarse();
  4. //este valor lo puedes obtener por _GET o lo puedes especificar
  5. $categoria= 1;
  6.  
  7. //si te preguntas por q nombre p y c a las tablas lo hice para identificar mas rapido los campos XP
  8.  
  9.     //realizo la consulta a la base de datos juntando ambas tablas
  10.     $sql = "SELECT p.*, c.nombre_categoria, c.id_categoria"
  11.     . "\n FROM productos as p"
  12.     //junto el id de la categoria con la categoria padre de los productos
  13.     . "\n LEFT JOIN categorias as c ON c.id_categoria = p.categoria_padre"
  14.     //busco solo los de una categoria
  15.     . "\n WHERE c.id_categoria = '".$categoria."'"
  16.     . "\n ORDER BY p.id_producto";
  17.     $resultado=mysql_query($sql,$conexion);
  18.     $fila = mysql_fetch_array($resultado);
  19.     //si encontramos algo en la categoria lo mostramos
  20.     if($fila):
  21. ?>
  22. <!-- comienzo-->
  23. <dt><?php echo $fila['nombre_categoria']; ?></dt>
  24.     <dd>
  25.         <span>
  26.     <?php foreach($fila as $items):?>
  27.             <p><?php echo $items['nombre_producto'];?></p>
  28.     <?php endforeach;?>
  29.         </span>
  30.     </dd>
  31. <!-- fin/-->    
  32. <?php endif;?>

Ahh y trata de q cuando muestres una parte del codigo lo hagas dentro de un HIghlight ya sea de php de html u otro formato, pero es para q se entienda mejor, algo asi como lo q pusiste de la conexion, solo lo digo por el ultimo mensaje q posteaste, saludos

Etiquetas: select, sql, tabla, tablas
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 12:12.