Comunidad de diseño web y desarrollo en internet online

Unir dos tablas con php

Citar            
MensajeEscrito el 04 Dic 2012 08:11 pm
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

Por rakshaka

16 de clabLevel



 

firefox
Citar            
MensajeEscrito el 04 Dic 2012 10:28 pm

Código PHP :

/*selecionamos la categoria donde el id_categoria sea igual a 1
en tu caso seria: */

$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'];
}
}


proba me avisas

Por js_toni

93 de clabLevel



Genero:Masculino  

programar

firefox
Citar            
MensajeEscrito el 05 Dic 2012 01:55 am
Lo pruebo... MIL GRACIAS POR CONTESTARME!!!

Por rakshaka

16 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Dic 2012 02:05 am
Ahi lo probé pero no es bien lo que busco...

Ahí lo cmbié por esto: <?php
$query = mysql_query('select * from categorias where id_categoria="1"');
while($row = mysql_fetch_array($query)){
$id_categoria = $row['id_categoria'];
echo $row['nombre_categoria'];
/* selecionamo los productos que tenga que ver con el id_categoria */
$query2 = mysql_query('select * from productos where categoria_padre="'.$id_categoria.'"');
while($rows2 = mysql_fetch_array($query2)) {
echo $rows2['nombre_producto'];
}
}
?>

Para que muestre el nombre de la categoría. El problema es que quiero que levante todas las categorias y productos de cada una sin necesidad de poner el numero id al que quiero que llame.

el ejemplo es el que puse antes:

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

Mil gracias por tu ayuda!!!

Por rakshaka

16 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Dic 2012 02:07 am
Por otro lado necesito que lo ejecutre de esta manera:

<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 rakshaka

16 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Dic 2012 12:11 pm
Usaría i++ para cambiar el id_categoria="1"' y que levante todos?

Por rakshaka

16 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Dic 2012 12:30 pm
La consulta que buscas es:

Código MySQL :

SELECT `categorias`.*, `productos`.* FROM `categorias`, `productos` WHERE `categorias`.`id_categoria` = `productos`.`categoria_padre` ORDER BY `categorias`.`id_categoria`;


Esto te devolverá todos los productos ordenados y agrupados por categoría.
Ahora para mostrarlos de la forma que pides deberías hacer:

Código PHP :

$catactual = null;
while ($fila = mysql_fetch_assoc()) {
  if ($catactual != $fila['id_categoria']) {
   echo "<p>".$fila['nombre_categoria']."</p>";
  $catactual = $fila['id_categoria'];
  }
echo "<p style='margin-left: 10px'>".$fila['nombre_producto']."</p>";
}

El código lo escribí de memoria así que puede tener errores de sintaxis.

Nota aparte: no es correcto usar <dd> y <dt> en el contexto que tú quieres hacerlo. Lo que quieres hacer es una lista y <dd>/<dt> no fueron pensado para eso. Si lo que quieres es hacer una tabla usa el tag <table>.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 05 Dic 2012 12:36 pm
Bueno, me ha funcionado lo que me pasaste y lo he cambiado por esto. Sigo el avance porque a alguien le pasará alguna vez:

<?php
$query = mysql_query('select * from categorias where id_categoria="'.$i.'"');
while($row = mysql_fetch_array($query)){
$id_categoria = $row['id_categoria'];
echo '<dt>'.$row['nombre_categoria'].'</dt><dd><span>';
/* selecionamo los productos que tenga que ver con el id_categoria */
$query2 = mysql_query('select * from productos where categoria_padre="'.$id_categoria.'"');
while($rows2 = mysql_fetch_array($query2)) {
echo '<p>'.$rows2['nombre_producto'].'</p>';
}
echo '</span></dd>';
}
?>

Ahora mi problema es que quiero que esto se repita $query = mysql_query('select * from categorias where id_categoria="'.$i.'"'); cambiando el numero automáticamente y que si el id no existe corte ahí...
Por otro lado necesito que haga un bucle de lo mismo cambiando ese id... de esa manera cargará todas las id_categoria existentes y luego dejará de hacerlo cuando no encuentre mas.

Por rakshaka

16 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Dic 2012 12:39 pm
No has leído con cuidado lo que he escrito.
La sentencia SQL que he escrito al inicio de mi mensaje hace exactamente lo que pides al final de tu mensaje sin necesidad de hacer incrementos raros de ids ni ejecutar dos o tres consultas SQL. Solo ejecutas UNA.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 05 Dic 2012 12:47 pm
Creo que postié mientras lo ponias... no vi ese post ya lo veo!!!!

Por rakshaka

16 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Dic 2012 12:52 pm
Mmmmm no logro hacer que funcione. Se supone que debe ser asi la cosa?

Código PHP :

<?php
include ('config.php');
?>
<?php
$link=Conectarse();
$catactual=mysql_query("SELECT 'categorias'.*, 'productos'.* FROM 'categorias', 'productos' WHERE 'categorias'.'id_categoria' = 'productos'.'categoria_padre' ORDER BY 'categorias'.'id_categoria';",$link);
?>
<?php 
   $catactual = null;
while ($fila = mysql_fetch_assoc()) {
  if ($catactual != $fila['id_categoria']) {
   echo "<p>".$fila['nombre_categoria']."</p>";
  $catactual = $fila['id_categoria'];
  }
echo "<p style='margin-left: 10px'>".$fila['nombre_producto']."</p>";
}
   ?>


Por otro lado el tema de dd y dl... las etiquetas el problema es que tengo el script de acordeon con esas etiquetas aunque concuerdo que esta mal y debería usar ul y li...

Por rakshaka

16 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Dic 2012 01:38 pm
Creo que el problema es que le estoy errando a la conexion no?

Por rakshaka

16 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Dic 2012 02:14 pm
Bueno, aca lo solucioné: Dejo la solución completa por si alguno tiene este problema a futuro. Gracias a DriverOp y js_toni por sus aportes.

Conectamos

Código PHP :

<?php
$link=Conectarse();
$conectar = mysql_query("SELECT categorias.*,productos.* FROM categorias,productos WHERE categorias.id_categoria = productos.categoria_padre ORDER BY categorias.id_categoria ASC",$link);
?>


Y ejecutamos el scripr con el modelo que arriba e puesto:

Código PHP :

<?php 
   $catactual = null;
while ($fila = mysql_fetch_assoc($conectar)) {
  if ($catactual != $fila['id_categoria']) {
   echo "<dt>".$fila['nombre_categoria']."</dt><dd><span>";
  $catactual = $fila['id_categoria'];
  }
echo "<p>".$fila['nombre_producto']."</p>";

}
echo "</span></dd>";
   ?>

Por rakshaka

16 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.