PHP - Como no repetir resultados

 
Vista:

Como no repetir resultados

Publicado por bruno (25 intervenciones) el 30/12/2009 12:49:41
Hola que tal? mi problema es el siguiente:
tengo una tabla en sql, a la que llame categorias que tiene tres campos, id, categoria_principal y subcategoria, ahora bien, me gustaria crear un meno con esa tabla, y que quedara algo asi Internet, y debajo, por ejemplo descarga de programas, etc etc, osea que no se repita la categoria principal ya que habran muchas que pondran internet.
Que quedara asi:

$categoria principal
<?php que se repita en base a la categoria principal ?>
$subcategorias
<?php que termine de repetir de esa categoria hasta aqui y que empiece con otra categoria igualmente ?>

Gracias de antemano! salu2!
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

RE:Como no repetir resultados

Publicado por leandro (42 intervenciones) el 30/12/2009 13:21:17
Primero me parece que deberias ordenar los datos que te devuelve la consulta y luego recorres los datos ordenados.
Por ejemplo:
_____________________________

//haces la consulta
$consulta = select * from tabla;

//ejecutas la consulta
$resultado = mysql_query($consulta);

//obtienes los datos
$reg = 0;
while($fila = mysql_fetch_assoc($result)){
$resultado[] = $fila;
$reg++;
}

//Ordenas los datos
$datos_ordenados = array();
for ($i = 0; $i< $reg; $i++){
$categoria_ppal = $resultado[0]["categoria_principal"];
$subcategoria = $resultado[0]["subcategoria"];
if ( isset( $datos_ordenados[$categoria_ppal] )){
//Si tiene datos insertamos una posicion nueva
$tam = count($datos_ordenados[$categoria_ppal] );
$datos_ordenados[$categoria_ppal][$tam] = $subcategoria;
}else{
// si no tiene datos insertamos al ppio
$datos_ordenados[$categoria_ppal][0] = $subcategoria;
}
}

//Recorres los datos ordenados y los despliegas
foreach($categorias as $key => $subcategorias){
$tam = count ($subcategorias);
echo ">". $key . "<br>";
for ($j = 0; $j < $tam; $j++){
echo ">>". $subcategorias[$j] ."<br>";
}
}

_______________________

Estas líneas de codigo te imprimirian:

> categoria_1
>>subcategoria1.1
>>subcategoria2.2
>>subcategoria3.3
>categoria_2
>>subcategoria2.1
>>subcategoria2.2
>>subcategoria2.3
>categoria3
>>subcategoria3.1
>>subcategoria3.2
...etc

Espero haber entendido tu duda y que te sirva.
Aclaracion: supuse que las subcategorias no se repiten dentro de una misma categoria porque no tendria sentido tener esos datos.
Si se repitieran , deberias de ejecutar la siguiente consulta en lugar de la anterior:

Select distinct categoria_ppal,subcategoria from tabla

Saludos
Leandro
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

RE:Como no repetir resultados

Publicado por leandro (42 intervenciones) el 30/12/2009 13:24:01
Primero me parece que deberias ordenar los datos que te devuelve la consulta y luego recorres los datos ordenados.
Por ejemplo:
_____________________________

//haces la consulta
$consulta = select * from tabla;

//ejecutas la consulta
$resultado = mysql_query($consulta);

//obtienes los datos
$reg = 0;
while($fila = mysql_fetch_assoc($result)){
$result[] = $fila;
$reg++;
}

//Ordenas los datos
$datos_ordenados = array();
for ($i = 0; $i< $reg; $i++){
$categoria_ppal = $resultado[0]["categoria_principal"];
$subcategoria = $resultado[0]["subcategoria"];
if ( isset( $datos_ordenados[$categoria_ppal] )){
//Si tiene datos insertamos una posicion nueva
$tam = count($datos_ordenados[$categoria_ppal] );
$datos_ordenados[$categoria_ppal][$tam] = $subcategoria;
}else{
// si no tiene datos insertamos al ppio
$datos_ordenados[$categoria_ppal][0] = $subcategoria;
}
}

//Recorres los datos ordenados y los despliegas
foreach($categorias as $key => $subcategorias){
$tam = count ($subcategorias);
echo ">". $key . "<br>";
for ($j = 0; $j < $tam; $j++){
echo ">>". $subcategorias[$j] ."<br>";
}
}

_______________________

Estas líneas de codigo te imprimirian:

> categoria_1
>>subcategoria1.1
>>subcategoria1.2
>>subcategoria1.3
>categoria_2
>>subcategoria2.1
>>subcategoria2.2
>>subcategoria2.3
>categoria3
>>subcategoria3.1
>>subcategoria3.2
...etc

Espero haber entendido tu duda y que te sirva.
Aclaracion: supuse que las subcategorias no se repiten dentro de una misma categoria porque no tendria sentido tener esos datos.
Si se repitieran , deberias de ejecutar la siguiente consulta en lugar de la anterior:

Select distinct categoria_ppal,subcategoria from tabla

Saludos
Leandro
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

errores!RE:Como no repetir resultados

Publicado por bruno (25 intervenciones) el 30/12/2009 13:46:46
me da dos errores que no logro darme cuenta!!
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, null given in C:\xampp\htdocs\puntosmadrid\bloques.php on line 13

Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\puntosmadrid\bloques.php on line 34
te marco con asteriscos cuales son a ver que sera.

<?php require_once('Connections/localhost.php'); ?>
<?php
mysql_select_db($database_localhost, $localhost);

//haces la consulta
$consulta = "SELECT * FROM categori";

//ejecutas la consulta
$resultado = mysql_query($consulta);

//obtienes los datos
$reg = 0;
*****while($fila = mysql_fetch_assoc($result)){
$result[] = $fila;
$reg++;
}

//Ordenas los datos
$datos_ordenados = array();
for ($i = 0; $i< $reg; $i++){
$categoria_ppal = $resultado[0]["cate"];
$subcategoria = $resultado[0]["subcate"];
if ( isset( $datos_ordenados[$categoria_ppal] )){
//Si tiene datos insertamos una posicion nueva
$tam = count($datos_ordenados[$categoria_ppal] );
$datos_ordenados[$categoria_ppal][$tam] = $subcategoria;
}else{
// si no tiene datos insertamos al ppio
$datos_ordenados[$categoria_ppal][0] = $subcategoria;
}
}

//Recorres los datos ordenados y los despliegas
*****foreach($categorias as $key => $subcategorias){
$tam = count ($subcategorias);
echo ">". $key . "<br>";
for ($j = 0; $j < $tam; $j++){
echo ">>". $subcategorias[$j] ."<br>";
}
}

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

RE:errores!RE:Como no repetir resultados

Publicado por leandro (42 intervenciones) el 30/12/2009 13:55:51
Bueno, primero que nada, veo que copiaste y pegaste el codigo sin analizarlo.
Si quieres aprender algo no deberias hacer eso.

Te da error por la forma de usar $result y $resultado. Ahora esta correcto.
Prueba este nuevo codigo y me avisas. Espero lo analices

<?php

//haces la consulta
$consulta = "SELECT * FROM categori";

//ejecutas la consulta
$resultado = mysql_query($consulta);

//obtienes los datos
$reg = 0;
while($fila = mysql_fetch_assoc($resultado)){
$result[] = $fila;
$reg++;
}

//Ordenas los datos
$datos_ordenados = array();
for ($i = 0; $i< $reg; $i++){
$categoria_ppal = $result[0]["cate"];
$subcategoria = $result[0]["subcate"];

if ( isset( $datos_ordenados[$categoria_ppal] )){
//Si tiene datos insertamos una posicion nueva
$tam = count($datos_ordenados[$categoria_ppal] );
$datos_ordenados[$categoria_ppal][$tam] = $subcategoria;
}else{
// si no tiene datos insertamos al ppio
$datos_ordenados[$categoria_ppal][0] = $subcategoria;
}
}

//Recorres los datos ordenados y los despliegas
foreach($categorias as $key => $subcategorias){
$tam = count ($subcategorias);
echo ">". $key . "<br>";
for ($j = 0; $j < $tam; $j++){
echo ">>". $subcategorias[$j] ."<br>";
}
}

?>

Saludos!
Leandro
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

RE:errores!RE:Como no repetir resultados

Publicado por Bruno (25 intervenciones) el 30/12/2009 13:59:57
Hola leandro muchas gracias, pero si lo habia analizado y lo intente arreglar cambiando el result porque me parecio que estaba mal, pero me sigue dando error en lo de
foreach... intente cambiar lo de $categorias por $categoria_ppal pero nada, es que jeje vas muy avanzado!! yo no se tanto de php! perdon por mi ignorancia y gracias otra vez!
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

RE:errores!RE:Como no repetir resultados

Publicado por leandro (42 intervenciones) el 30/12/2009 14:07:22
Bruno tienes razón, disculpa.
Ahora creo que si estaria. Prueba y me comentas.
No te preocupes que yo tambien estoy aprendiendo.

<?php

//haces la consulta
$consulta = "SELECT * FROM categori";

//ejecutas la consulta
$resultado = mysql_query($consulta);

//obtienes los datos
$reg = 0;
while($fila = mysql_fetch_assoc($resultado)){
$result[] = $fila;
$reg++;
}

//Ordenas los datos
$datos_ordenados = array();
for ($i = 0; $i< $reg; $i++){
$categoria_ppal = $result[0]["cate"];
$subcategoria = $result[0]["subcate"];

if ( isset( $datos_ordenados[$categoria_ppal] )){
//Si tiene datos insertamos una posicion nueva
$tam = count($datos_ordenados[$categoria_ppal] );
$datos_ordenados[$categoria_ppal][$tam] = $subcategoria;
}else{
// si no tiene datos insertamos al ppio
$datos_ordenados[$categoria_ppal][0] = $subcategoria;
}
}

//Recorres los datos ordenados y los despliegas
foreach($datos_ordenados as $key => $subcategorias){
$tam = count ($subcategorias);
echo ">". $key . "<br>";
for ($j = 0; $j < $tam; $j++){
echo ">>". $subcategorias[$j] ."<br>";
}
}

?>

Saludos!
Leandro
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

RE:errores!RE:Como no repetir resultados

Publicado por bruno (25 intervenciones) el 30/12/2009 14:10:22
yaaa lo habia probado tambien porque busque en google lo de foreach y mostraba qeu cuando se crea un array es lo que va dentro del foreach, pero igualmente no funciona, osea si funciona pero me devuelve todo mal:
>Gastronomia
>>Restaurantes
>>Restaurantes
>>Restaurantes
>>Restaurantes
>>Restaurantes, supongo que habra algun numero mal o algo..ufff que dolor de cabeza me esta dando esto! jeje llevo una vida queriendo hacer esto!
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

RE:errores!RE:Como no repetir resultados

Publicado por leandro (42 intervenciones) el 30/12/2009 14:11:26
Este es el codigo, tu habias cambiado

$result[$i]["cate"] por $result[0]["cate"]

pero es con la $i porque la $i va recorriendo desde 0 hasta el total.
Si fuera 0 siempre darias solo el primero.

Saludos

<?php

//haces la consulta
$consulta = "SELECT * FROM categori";

//ejecutas la consulta
$resultado = mysql_query($consulta);

//obtienes los datos
$reg = 0;
while($fila = mysql_fetch_assoc($resultado)){
$result[] = $fila;
$reg++;
}

//Ordenas los datos
$datos_ordenados = array();
for ($i = 0; $i< $reg; $i++){
$categoria_ppal = $result[$i]["cate"];
$subcategoria = $result[$i]["subcate"];

if ( isset( $datos_ordenados[$categoria_ppal] )){
//Si tiene datos insertamos una posicion nueva
$tam = count($datos_ordenados[$categoria_ppal] );
$datos_ordenados[$categoria_ppal][$tam] = $subcategoria;
}else{
// si no tiene datos insertamos al ppio
$datos_ordenados[$categoria_ppal][0] = $subcategoria;
}
}

//Recorres los datos ordenados y los despliegas
foreach($datos_ordenados as $key => $subcategorias){
$tam = count ($subcategorias);
echo ">". $key . "<br>";
for ($j = 0; $j < $tam; $j++){
echo ">>". $subcategorias[$j] ."<br>";
}
}

?>

Saludos!
Leandro
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

RE:errores!RE:Como no repetir resultados

Publicado por Bruno (25 intervenciones) el 30/12/2009 14:15:41
Muchisimas gracias!!! que genio eres!!!
oye no seras de madrid, es que tengo un trabajo masivo de paginas webs, pero serian sencillas, de restaurantes y eso.. si te interesa avisame.
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

RE:errores!RE:Como no repetir resultados

Publicado por leandro (42 intervenciones) el 30/12/2009 14:18:30
Jaja me alegro que te haya servido, para esto estan los foros! ;)
No soy de madrid, pero capas que me interesa eso que me decis.
Pasame tu correo o dame una web en donde te deje un correo y hablamos.
Saludos!
Leandro
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

RE:errores!RE:Como no repetir resultados

Publicado por Bruno (25 intervenciones) el 30/12/2009 14:21:14
jaja sos argentinooooooooo? jeje yo soy uruguayo, mira entra en www.latiacebolla.es en contacto webmaster y enviame tu email y te agrego a msn, aunque te digo, que no te sirve porque si no vivis aca, no se puede hacer, ya que estoy haciendo uan web en la cual voy a meter todos los lugares de madrid y presiso un webmaster que me vaya haciendo web, pero que se ocupe de ir sacar las fotos y hacer todo, yo solo paso el trabajo.
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

RE:errores!RE:Como no repetir resultados

Publicado por leandro (42 intervenciones) el 30/12/2009 14:26:15
JAJa que casualidad, yo tambien soy de Uruguay.

Aguante Uruguay

Leandro
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

RE:errores!RE:Como no repetir resultados

Publicado por ignasi (1 intervención) el 09/02/2010 08:37:55
Y cómo se modificaría para hacer este esquema con 4 niveles.
Me explico. Mi db es una clasificación de equipos deportivos. En una misma tabla figura la Competición, la categoría, el grupo y la fase de la competición.
Mi idea es poner una tabla o una lista en la que aparezcan todas las posibles agrupaciones, es decir, aunque no sea muy útil, ya que son de categorías diferentes, puedes seleccionar la competición y ver las puntuaciones de todos los equipos.
Y puedes ir ganando en nivel de detalle para ver hasta los equipos de un grupo en la fase en la que se encuentran.

La idea es

Competición
- Categoría A
- - Grupo A
- - - Fase I
- - Grupo B
- Categoría B
- - Grupo A
- - -Fase I
- - Grupo B
- - - Fase I
- - - Fase II
- - Grupo C
- - -Fase I

He intentado adaptar tu código pero aún soy demasiado novato.
¿Debo modificar la db?
Gracias por la atención.

NOTA.- Yo soy de España. ;)
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