Foros del Web » Programando para Internet » PHP »

Consulta Filtrado resultados PHP mYSQL

Estas en el tema de Consulta Filtrado resultados PHP mYSQL en el foro de PHP en Foros del Web. Hola amigos, tengo el siguiente problema: tengo una pagina listado, me muestra una lista de Temas de mi base de datos, cuando le doy clic ...
  #1 (permalink)  
Antiguo 10/05/2014, 09:06
 
Fecha de Ingreso: marzo-2011
Ubicación: Oaxaca
Mensajes: 252
Antigüedad: 13 años, 1 mes
Puntos: 17
Pregunta Consulta Filtrado resultados PHP mYSQL

Hola amigos, tengo el siguiente problema:

tengo una pagina listado, me muestra una lista de Temas de mi base de datos, cuando le doy clic a uno de los Temas, me lleva a su pagina detalle a traves del parametro "Nombre" (hasta aqui no hay ningun problema )

la tabla Temas tiene como campos Id, Nombre, imagen

ahora, tengo otra tabla, esta tabla tiene 2 columnas, contiene la llave foranea que es el Nombre del Tema, la otra columna tiene el nombre de Subtema

cuando entro a la pagina detalle, me muestra perfectamente un listado de Temas con subtemas, pero la columna subtema es una llave foranea de otra tabla, esta tabla tiene los siguientes campos.

Id, Etiqueta_Abierta, Subtema, Etiqueta Cerrada, Nombre_Tema, Clase.

la pagina detalle me muestra algo asi.

Tema ----- Subtema

Reinos Naturales ---- animalae
Reinos Naturales ---- Fungi
Reinos Naturales ---- Plantae
Ecosistemas ---- Bosque_Coniferas
Ecosistemas ---- Deserticos
Ecosistemas ---- Selvas
etc.

lo que quiero hacer es que me muestre los datos de mi tabla Subtema, cuando el subtema de mi tabla de 2 columnas sea igual al subtema de la Tabla "Subtema", pero no por enlace, si no, que me lo muestre de la siguiente forma

Reinos Naturales --- Animalae
* Id, Etiqueta_abierta, clase, etiqueta_Cerrada
* Id, Etiqueta_abierta, clase, etiqueta_Cerrada
* Id, Etiqueta_abierta, clase, etiqueta_Cerrada

Reinos Naturales --- Fungi
* Id, Etiqueta_abierta, clase, etiqueta_Cerrada
* Id, Etiqueta_abierta, clase, etiqueta_Cerrada

Reinos Naturales --- plantae
* Id, Etiqueta_abierta, clase, etiqueta_Cerrada
* Id, Etiqueta_abierta, clase, etiqueta_Cerrada
* Id, Etiqueta_abierta, clase, etiqueta_Cerrada
* Id, Etiqueta_abierta, clase, etiqueta_Cerrada
* Id, Etiqueta_abierta, clase, etiqueta_Cerrada

etc.

el problema que tengo es que no logro encontrar la forma de hacer la comparacion correcta, ya que el resultado que me arroja es el siguiente


Reinos Naturales --- Animalae

* Id, Etiqueta_abierta, clase, etiqueta_Cerrada
* Id, Etiqueta_abierta, clase, etiqueta_Cerrada
* Id, Etiqueta_abierta, clase, etiqueta_Cerrada
* Id, Etiqueta_abierta, clase, etiqueta_Cerrada
* Id, Etiqueta_abierta, clase, etiqueta_Cerrada

Reinos Naturales ---- Fungi
Reinos Naturales ---- Plantae
Ecosistemas ---- Bosque_Coniferas
Ecosistemas ---- Deserticos
Ecosistemas ---- Selvas

etc.

este es el codigo que utilizo

Código PHP:
            <table border="1">
          <tr>
            <td>Nombre_Ponencias</td>
            <td>Nombre_Diapositiva</td>
          </tr>
          <?php do { ?>
            <tr>
              <td><?php echo $row_Ponencias['Nombre_Ponencias']; ?></td>
              <td><?php echo $row_Ponencias['Nombre_Diapositiva']; ?></td>
                      <?php 
                            
if( $row_Temas['Nombre_Subtema'] == $row_SubTemas['Nombre_Subtema']){
                                do {
                                        echo 
$row_SubTemas['Id'];
                                        echo 
' ';
                                        echo 
$row_SubTemas['Etiqueta_abierta'];
                                        echo 
' ';
                                        echo 
$row_SubTemas['clase'];
                                        echo 
$row_SubTemas['Etiqueta_Cerrada']];
                                        echo
'</br>'
                                
}
                            }else{
                                echo: 
'no funciona';
                            }while (
$row_Subtemas mysql_fetch_assoc($Subtemas));    
              
?>
            </tr>
            <?php } while ($row_Temas mysql_fetch_assoc($Temas)); ?>
        </table>
Gracias amigos y espero sus respuestas :)
  #2 (permalink)  
Antiguo 10/05/2014, 09:41
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Consulta Filtrado resultados PHP mYSQL

Falta lo mas importante, no ? ;)

La consulta SQL
__________________
Salu2!
  #3 (permalink)  
Antiguo 11/05/2014, 00:36
 
Fecha de Ingreso: marzo-2011
Ubicación: Oaxaca
Mensajes: 252
Antigüedad: 13 años, 1 mes
Puntos: 17
Respuesta: Consulta Filtrado resultados PHP mYSQL

Gracias amigo por responder, cierto, olvide poner la consulta

la primer consulta, no creo tener problema en ello :)

Código:
SELECT *
FROM casos
WHERE Nombre = '$Detalle'
la segunda, creo que si


Código:
SELECT *, Nombre_Subtema, Nombre_Tema
FROM Subtema, Tema_Subtema
WHERE Nombre_Subtema = Nombre_SubtemaT   AND Nombre_Tema = '$Tema'
Gracias amigos y espero su respuesta

Última edición por juangemelo01; 11/05/2014 a las 00:50
  #4 (permalink)  
Antiguo 11/05/2014, 02:11
 
Fecha de Ingreso: marzo-2011
Ubicación: Oaxaca
Mensajes: 252
Antigüedad: 13 años, 1 mes
Puntos: 17
Respuesta: Consulta Filtrado resultados PHP mYSQL

Bueno amigos, despues de un apagon que tuve con la computadora y ver que mi archivo se daño por eso, volvi a hacer la pagina Detalle, encontre algo de progreso, pero a la vez no
les muestro una imagen :)



Por lo que veo, mi arreglo se vacio a la hora de seguir con el resto de los subtemas, por el momento ya tengo una pista mas para investigar

este es el codigo completo de la pagina detalle

Código PHP:
<?php require_once('Connections/Experimento.php'); ?>
<?php
$maxRows_Detalle 
10;
$pageNum_Detalle 0;
if (isset(
$_GET['pageNum_Detalle'])) {
  
$pageNum_Detalle $_GET['pageNum_Detalle'];
}
$startRow_Detalle $pageNum_Detalle $maxRows_Detalle;

$colname_Detalle "-1";
if (isset(
$_GET['Nombre_temaT'])) {
  
$colname_Detalle = (get_magic_quotes_gpc()) ? $_GET['Nombre_temaT'] : addslashes($_GET['Nombre_temaT']);
}
mysql_select_db($database_Experimento$Experimento);
$query_Detalle sprintf("SELECT * FROM temas_subtemas WHERE Nombre_temaT = '%s'"$colname_Detalle);
$query_limit_Detalle sprintf("%s LIMIT %d, %d"$query_Detalle$startRow_Detalle$maxRows_Detalle);
$Detalle mysql_query($query_limit_Detalle$Experimento) or die(mysql_error());
$row_Detalle mysql_fetch_assoc($Detalle);

if (isset(
$_GET['totalRows_Detalle'])) {
  
$totalRows_Detalle $_GET['totalRows_Detalle'];
} else {
  
$all_Detalle mysql_query($query_Detalle);
  
$totalRows_Detalle mysql_num_rows($all_Detalle);
}
$totalPages_Detalle ceil($totalRows_Detalle/$maxRows_Detalle)-1;

mysql_select_db($database_Experimento$Experimento);
$query_Contenido "SELECT * FROM subtema_contenido";
$Contenido mysql_query($query_Contenido$Experimento) or die(mysql_error());
$row_Contenido mysql_fetch_assoc($Contenido);
$totalRows_Contenido mysql_num_rows($Contenido);
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<h1>Nombre del Tema: </h1>
<h1><?php echo $row_Detalle['Nombre_temaT']; ?> </h1>

<ul>    
  <?php do { ?>
     <li><?php echo $row_Detalle['Nombre_SubtemaS']; ?></li>
     <ol>
         <?php do { ?>
            <?php if ( $row_Contenido['Nombre_Subtema']  === $row_Detalle['Nombre_SubtemaS']  ){ ?>
            <li> <?php echo $row_Contenido['Clase']; ?> </li>
        
            <?php }else {
                    echo 
'no se cumple la condicion';
                    echo 
'<br>';
                    echo 
$row_Contenido['Nombre_Subtema'];
                    echo 
'_-_-_-_-_-_';
                    echo 
$row_Detalle['Nombre_SubtemaS'];
                    echo 
'<br>';
                    }
?>
            <?php } while ($row_Contenido mysql_fetch_assoc($Contenido)); ?>
                
     </ol>
   <?php } while ($row_Detalle mysql_fetch_assoc($Detalle)); ?>
</ul>

</body>
</html>
<?php
mysql_free_result
($Detalle);

mysql_free_result($Contenido);
?>
Gracias amigos y espero sus respuestas ;)
  #5 (permalink)  
Antiguo 11/05/2014, 07:28
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Consulta Filtrado resultados PHP mYSQL

De entrada tienes un error de diseño en tu base de datos:

Tabla Tema y tabla Subtemas ? por que no una tabla temas solamente ? es como tener tabla Usuarios, Clientes, Provedores,...etc cuando solo necesitas una tabla Usuarios ;)


Empieza por ahi.... conceptualmente no esta muy bien tu diseño
__________________
Salu2!
  #6 (permalink)  
Antiguo 11/05/2014, 07:57
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Consulta Filtrado resultados PHP mYSQL

COmo te dice @Italico76, un subtema es un tema que depende de otro, que a nivel de tablas se define como una columna nulable que es FK de la misma tabla. Eso hace que un tema Z esté relacionado con otro tema Y, simplemente por clave.
Tal modelo no necesita tablas adicionales.

En cuanto a lo de usuarios de diferentes tipos, discrepo parcialmente: SI todos los tipos de usuario tienen los mismos atributos (datos o columnas), y sólo cambian los usos, eso lo puedes simplificar con un dato mas que determine la categoría a la que pertenece el usuario.
Sólo se puede requerir una tabla en especial si uno o más atributos obligatorios en un tipo de usuario no existe en los demás.
En un Cliente, por ejemplo, sería el tipo de cuenta o las formas de periodicidad de pago que se usan con él, y que no existan en el Proveedor. O incluso el responsable de los pagos, que podría ser diferente al cliente en tanto persona individual.
En estos últimos casos se requiere definir una herencia desde Usuario a Cliente y Proveedor.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 11/05/2014, 08:04
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Consulta Filtrado resultados PHP mYSQL

Estimado @gnzsoloyo : sobre esto que comentas para el caso tipico Usuarios-Clientes-Proveedores, me gustaria preguntarte bien como es que lo implementas tú.

Normalemente lo que hago es creo tablas complementarias para los campos adicionales relacionadas por FK pero uso la misma tabla base 'Usuarios' para las 3 entidadades (Usuarios-Clientes-Proveedores)


Cual seria la forma correcta ? como implementas tu la herencia ? tengo entendido hay 2 formas una es la que comento y la otra es poner todos los campos (asi sean opcionales para las demas entidades) en la tabla Usuarios.

Gracias desde ya por tu respuesta.
__________________
Salu2!
  #8 (permalink)  
Antiguo 11/05/2014, 09:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Consulta Filtrado resultados PHP mYSQL

Es un tema más relacionado con Análisis de Sistemas (AS) que con otra cosa. La necesidad de la existencia de la herencia en Usuarios, Clientes y Proveedores surge de la definición de las entidades que intervienen en el sistema, y entre las razones de su diferenciación están ciertos conceptos que van más allá de simplemente los atributos que tienen.
El tema es que Cliente y Proveedor son entidades con atributos similares en algunas cosas, y diferentes en otras. Pero por sobre todas las cosas son entidades que tienen relaciones, cardinalidades y responsabilidades diferentes. Desde ese punto de vista no deben compartir la misma representación en el sistema, ni a nivel de aplicación y muy especialmente a nivel de datos.
Lo que si podrían ser es usuarios, siempre y cuando un Proveedor pueda ser un usuario con acceso al sistema. Eso es un tema a definir por el cliente que solicita el desarrollo, y no algo que se asume per se. Si el proveedor no realiza gestiones en la aplciación, pasa a ser una enitidad y no un usuario.
No perdamos de vista que en un sistema un usuario es alguien que en algún momento hace uso de alguna interfaz de forma directa. Si el Proveedor provee datos que alimentan la sistema, pero no los inserta él, el Proveedor pasa a ser una entidad, pero no un usuario.
¿Se entiende la idea?

Ahora bien, supongamos que el proveedor si realiza gestiones allí. En ese contexto el usuario tiene dos grupos de propiedades: 1) Es persona (física o jurídica), y 2) es usuario del sistema. Aunque lo parezcan, desde el punto de vista del AS, no son la misma cosa. Un usuario lo es con sólo un grupo de atributos: username, password, perfil y rol, pero no necesita ser una persona física ni jurídica.
La persona, por su lado, es una entidad identificada por nombre (o razon social), numero de documento (no interno a la organización), domicilio, condición impositiva, teléfono., etc. Es decir, es persona en tanto se lo pueda identificar en el entorno, en lo externo al sistema.
En ese sentido un Proveedor es persona, y un Cliente también, pero con atributos diferentes, porque las acciones, las relaciones y la identificación de sus responsabilidades en el sistema son diferentes. Son esas relaciones y responsabilidades las que ayduan a determinar la jerarquía de la herencia.
Para describirlo:
- Persona es una clase o entidad padre.
- Cliente y Proveedor heredan a Persona.
- Cliente y Proveedor se relacionan con Usuario (a nivel de POO eso se expresa como una relación o asociación de agregción)..

¿Va siendo un poco más claro?

Lo que tiene que entenderse también es que el modelo de clases no es convertible en forma directa a un modelo de datos físicos. La base de datos no es un reflejo de espejo de las clases de la aplicación, sino que tiene sus propias reglas para mantener consistencia e integridad de los datos, lo que hace que el mismo esquema en uno u otro modelo contengan diferencias muy grandes.
Para ejemplificarlo, un modelo de 12 clases en la aplicación puede requierir 57 tablas para implementarlo en la BBDD. Porque desde la arquitectura de datos no se miran procesos sino datos.
De hecho, a nivel de BBDD, lo que define si se deben crear una o dos tablas para los datos de Usuario y Persona, es una decisión de diseño: ¿Una persona tiene un único usuario o muchos?
Si la cardinalidad es 1:1 ó 1:N cambia la cosa, pero para la aplicación la diferencia podría ser entre tener un atributo string o un array, nada más.

¿Se va acercando la cosa a tu pregunta?

PD: Como siempre digo, en cuato a "la forma correcta", ese es un concepto que no existe en desarrollo. Puede ser lo "adecuado", lo "requerido", lo "conveniente", pero no existe lo correcto.
El mismo sistema, diseñado por dos analistas diferentes, puede desarrollarse con modelados totalmente diferentes y hasta contradictorios, y ambos ser correctos.
Eso es algo que me dijeron en la primera clase de Análisis de Sistemas I, y la experiencia me ha demostrado que los profesores tenían razón.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 11/05/2014, 10:34
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Consulta Filtrado resultados PHP mYSQL

@gnzsoloyo : excelente y clarificadora explicacion

Me quedo por entender lo que haz querido decir con:

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Cliente y Proveedor se relacionan con Usuario (a nivel de POO eso se expresa como una relación o asociación de agregación)..
Y si es especificamente por:

Cita:
Iniciado por gnzsoloyo Ver Mensaje
De hecho, a nivel de BBDD, lo que define si se deben crear una o dos tablas para los datos de Usuario y Persona, es una decisión de diseño: ¿Una persona tiene un único usuario o muchos?
Solo entiendo lo que explicas de la "agregacion" si una Entidad (ya sea Cliente o Proveedor) puede tener varios Usuarios (y sino grave porque no entendi nada)

Nuevamente gracias por tu tiempo y dedicación
__________________
Salu2!
  #10 (permalink)  
Antiguo 11/05/2014, 10:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Consulta Filtrado resultados PHP mYSQL

Cita:
Solo entiendo lo que explicas de la "agregacion" si una Entidad (ya sea Cliente o Proveedor) puede tener varios Usuarios (y sino grave porque no entendi nada)
Exactamente. Una agregación implica, si mal no recuerdo, clases que se relacionan porque se "agregan" a a otra, pero sin perder su identidad ni responsabilidades. en cambio la composición es una atomización que requiere forzosamente de otros objetos para crear la entidad que realmente se usa.

Creo que este es un ejemplo:



Puntualmente, si se da que un Cliente o un Proveedor puede poseer varios usernames, que se usan para administrar diferentes tipos de gestiones a los que puede acceder, se da el caso de la agregación porque existe una cardinalidad 1:N.
¿En qué casos se da esto en la realidad?
Bueno, un ejemplo es cuando una sucursal de una empresa tiene N vendedores, y todos responden a un mismo Jefe de Ventas. El sistema de ventas se activa (login de gestión global) por el Jefe de Ventas, pero cada venta de cada vendedor se inicia con el username y password de ese mismo vendedor. Todos existen en el sistema, pero no todos acceden a lo mismo.
Sin duda habrás visto al ir a este tipo de negocios que cada vendedor hace un login propio... ¿no?
Bueno, trabajan con un sistema de relaciones de jerarquía padre/hijo en los vendedores, y al mismo tiempo cada vendedor tiene asociado un único perfil. El perfil compone al vendedor, y el vendedor agrega al jefe.
Son sistemas algo complejos y difíciles de describir (trabajo en una empresa con algo parecido, pero muuuucho más enredado :P).

Como notarás, cuando empiezas a escarbar en el sistema, empiezan a aparecer cosas, conceptualizaciones algo enredadas. Todo esto es invisible (transparente) al usuario. Solamente las vemos del lado de los desarrolladores.

Que nos disculpe @juangemelo01, espero que no nos estemos yendo demasiado de tema :D
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 11/05/2014 a las 11:03
  #11 (permalink)  
Antiguo 11/05/2014, 12:57
 
Fecha de Ingreso: marzo-2011
Ubicación: Oaxaca
Mensajes: 252
Antigüedad: 13 años, 1 mes
Puntos: 17
Respuesta: Consulta Filtrado resultados PHP mYSQL

Gracias amigos por responder, y tambien gracias por complementar con informacion extra

la verdad es que me surgio la duda si era posible o no hacer en una pagina detalle la relacion con una tabla extra, sin que tenga un campo directamente relacionado al parametro con el que se hace el desglose de la informacion, pero que si tenga relacion alguna con otra tabla que si tiene relacion directa al parametro enviado, por eso improvise esas tablas para experimentar, las tablas son las siguientes.

temas (Nombre_Tema, imagen );
subtemas(Nombre_Subtema);
temas_subtemas(Nombre_TemaT , Nombre_SubtemaS);
Subtema_Contenido (Id, EtiquetaAbierta, Clase, Etiqueta_Cerrada,Nombre_Subtema);

Suponiendo que el sistema de base de datos es correcto (hipoteticamente, ya que en la practica, como dicen, esta mal)

¿es posible obtener el resultado que deseo en la pagina detalle?
¿que tan viable es hacer ese tipo de llamadas al servidor de Base de datos?

Lo que me gustaria lograr seria lo siguiente:

Pagina Listado

1 - Contaminacion
2 - Ecosistemas
3 - Regiones Naturales
etc.

Pagina Detalle (ejemplificare con Regiones Naturales)

*Animalae
---Carnivoros
---Hervivoros
---Oviparos
---Viviparos
*Plantae
---Acuaticos
---Deseticos
---Humedos
*Fungi
---Medicinales
---Nocivos
---Ornato
*Mineral
---Clasificacion
---Importancia


la pagina listado ya la tengo, y al enlazar a la detalle, tambien, pero no logro mostrar apropiadamente los datos de la tabla Subtema_Contenido
espero haberme expresado bien, Gracias amigos y espero sus respuestas :)

Última edición por juangemelo01; 11/05/2014 a las 13:14

Etiquetas: mysql, variables
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 10:27.