Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

seleccionar elementos de un arreglo que coincidan con un campo de una tabla

Estas en el tema de seleccionar elementos de un arreglo que coincidan con un campo de una tabla en el foro de Mysql en Foros del Web. Hola : Estoy realizando un script ,pero en el paso siguiente me he dentenido bastante tiempo y no sé como darle solución o si realmente ...
  #1 (permalink)  
Antiguo 21/04/2011, 09:00
 
Fecha de Ingreso: marzo-2011
Mensajes: 15
Antigüedad: 13 años, 1 mes
Puntos: 0
seleccionar elementos de un arreglo que coincidan con un campo de una tabla

Hola :
Estoy realizando un script ,pero en el paso siguiente me he dentenido bastante tiempo y no sé como darle solución o si realmente se puede hacer así
Hago una cosulta preguntando el id de la categoria y si hay más de una categoria con ese nombre hago un arreglo seleccionando todos los que existan en esa tabla
y con ellos pregunto a otra tabla, cual de los elementos del arreglo coincide con la categoria padre que fue declarada anteriormente.

Me podría dar una ayudita por favor?

saludos!

Código PHP:
           <?php 
        $conexion 
mysql_connect("localhost""guao""guao2010") or die ("Error: "mysql_error());

      
mysql_select_db("guao"$conexion);
      
       
//Anteriormente se declaró la variable  $categoria  Ejemplo: $categoria == "Un nombre";
      // Anteriormente se declaró la categoria padre $pcategoria Ejemplo: $pcategoria == "otro nombre";
     
      
    
      
$consulta "select categories_id  from categories_description where
  categories_name LIKE '%$categoria%' 
  ORDER BY categories_id DESC, categories_name"

      
      
      
$result mysql_query($consulta) or die('Error, query failed');
    

                           if(
mysql_num_rows($result) == 0)
                                         {
                                           echo 
"No se encontraron RESULTADOS de categorias ";
                                         } 
                                elseif(
mysql_num_rows($result) ==1)
                                         {
                                             
$qry="select categories_id  from categories_description where categories_name  = '$categoria' ";

          
$result=mysql_query($qry); 
          
           
$row=mysql_fetch_array($result);

          
$variable=$row["categories_id"];

                                         }
                                else
                            {           
                                        
                             while (
$row mysql_fetch_assoc($result))
                             {
  
                                       
$arraycategories_id[]= $row["categories_id"];   
 

                                               
//echo " el primer id es:$arraycategories_id[0]"; 

                                              //echo " el segundo id es: $arraycategories_id[1]";
                                               
                                               //echo "el tercero id es:$arraycategories_id[2]"; 
                                               
                                               
                                               
    // no se si lo que viene a  continuacion estará bien o se puede hacer algo //diferente con el mismo fin

$qry="select $arraycategories_id[]  from categories where parent_id='$pcategoria' ";

          
$result=mysql_query($qry); 
          
           
$row=mysql_fetch_array($result);

          
$pvariable=$row["categories_id"]; 
                                               
                                              
                             }
                            
                            }
                              
                            
     
            
?>
  #2 (permalink)  
Antiguo 21/04/2011, 10:23
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: seleccionar elementos de un arreglo que coincidan con un campo de una tabl

Hola,

He visto muchas veces este tipo de programación aquí en foros del web, y me voy a tomar la molestia de explicar detenidamente como se hace :), porque al parecer ya son bastantes los que desarrollan aplicaciones de esta forma y posiblemente te va a ser de utilidad,

Supongamos que tenemos este diagrama, una tabla maestra y una tabla de detalle, aunque evidentemente 'categories_name' esta repetida en las dos tablas, pero traté de apegarme lo más posible a tu diseño.



Con esta estructura,

Código MySQL:
Ver original
  1. CREATE SCHEMA IF NOT EXISTS `categories` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
  2. USE `categories` ;
  3.  
  4. CREATE  TABLE IF NOT EXISTS `categories`.`categories` (
  5.   `categories_id` INT NOT NULL ,
  6.   `categories_name` VARCHAR(45) NULL ,
  7.   PRIMARY KEY (`categories_id`) )
  8.  
  9. CREATE  TABLE IF NOT EXISTS `categories`.`categories_description` (
  10.   `categories_id` INT NULL ,
  11.   `categories_name` VARCHAR(45) NULL ,
  12.   `categories_description` VARCHAR(45) NULL ,
  13.   INDEX `fk_categories_description_categories` (`categories_id` ASC) ,
  14.   CONSTRAINT `fk_categories_description_categories`
  15.     FOREIGN KEY (`categories_id` )
  16.     REFERENCES `categories`.`categories` (`categories_id` )

Cuando quieres extraer todos los registros de la tabla primaria (maestra) y después extraer los registros de la tabla relacionada (detalle), normalmente lo haces en un solo Query, salvo en casos excepcionales donde no es posible,

Código PHP:
<body>
<?php
$conn 
mysql_connect('localhost''root''PASSWORD');
mysql_select_db('categories');

$strSQL '
SELECT a.`categories_id`, a.`categories_name`, b.`categories_description`
FROM `categories` a
INNER JOIN `categories_description` b
ON a.`categories_id` = b.`categories_id`
ORDER BY a.`categories_id`
'
;

$result mysql_query($strSQL$conn);
if (
mysql_num_rows($result) == 0) {
    echo 
'<h1>No hay datos</h1>';
} else {
    
$i 0;
    while ((
$row mysql_fetch_assoc($result)) != NULL) {
        if (
$i != $row['categories_id']) {
            
$i $row['categories_id'];
            echo 
"<h1>Cateogiria : $i {$row['categories_name']}</h1>";
        }
        echo 
"<p>Titulo : {$row['categories_description']}</p>";
    }
}

mysql_free_result($result);
mysql_close($conn);
?>
</body>
Cual es el problema, estadísticas; por ejemplo, tienes 5 categorías, cada categoría tiene 5 productos o descripciones, si haces una consulta por cada producto o descripción, estas haciendo 6 consultas a la base de datos. Una para sacar las categorías y 1 por cada categoría. Ahora multiplica eso por 5 usuarios de tu programa, son 30 consultas consecutivas o concurrentes a la base de datos, si ya sé que no es mucho, cuando tengas 100 categorias y 1000 usuarios entonces me cuentas como te va.

En este ejemplo solamente se hace 1 consulta a la base de datos por usuario, aunque traiga alguna información repetida es mucho mas eficiente que 6 consultas consecutivas.

Saludos,

Última edición por HackmanC; 21/04/2011 a las 10:42 Razón: cálculos y quitar mi password :)
  #3 (permalink)  
Antiguo 21/04/2011, 13:37
 
Fecha de Ingreso: marzo-2011
Mensajes: 15
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: seleccionar elementos de un arreglo que coincidan con un campo de una tabl

HackmanC, muchas gracias por responder , disculpa las molestias ocasionadas pero no tengo mucho conocimiento de php estoy aprendiendo.

Estuve mirando el codigo que me enviaste y creo que el primer código (mysql) no es lo que quiero realmente , sino que si no existe categoria no siga ejecutando el script y no cree categoria.

Pero en el segundo codigo(php) tengo dudas, no se si me explique bien pero en las dos tablas hay un registro que tiene tiene categories_id es ese es el que quiero obtener teniendo ya definidos variables .

tabla(categories_descripcion) categories_id categories_name

tabla(categories) campos categories_id parent_id

Mi script primero va entrar a categories_descripcion y va buscar el id por el nombre que le entró

$consulta = "select categories_id from categories_description where
categories_name LIKE '%$categoria%'

asi lo haria para parent_id en caso de que haya varias categorias con ese nombre


$consulta = "select categories_id from categories where
categories_descripcion LIKE '%$parentcategoria%'

ahora si hay mas de una categoria con ese nombre yo quiero que encuentre en las tabla categories y categories_descripcion

el categories_id que coincide entre ambas teniendo como parent_id =$parentcategoria

Es por eso que no entiendo esta parte del codigo, yo solo quiero comparar entre las dos tablas cuando hay mas de una categoria con el nombre $categoria

Para encontrar el unico registro que tiene Categories_id en comun con un parent_id=$parentcategoria

Código PHP:
$strSQL 'SELECT a.`categories_id`, a.`categories_name`, b.`parent_id ==$parentcategoria` FROM `categories` a
INNER JOIN `categories_description` b ON a.`categories_id` = b.`categories_id`
ORDER BY a.`categories_id`
'
;

$result mysql_query($strSQL$conn);
if (
mysql_num_rows($result) == 0) {
    echo 
'No hay datos';
} else {
    
$i 0;
    while ((
$row mysql_fetch_assoc($result)) != NULL) {
        if (
$i != $row['categories_id']) {
            
$i $row['categories_id'];
            echo 
"<h1>Cateogiria : $i {$row['categories_name']}</h1>";
        }
        echo 
"<p>Titulo : {$row['categories_description']}</p>";
    }
}

mysql_free_result($result);
mysql_close($conn);
?> 
No estoy entendiendo , podrias ayudarme un poco mas por favor.
Gracias

Última edición por jane985; 21/04/2011 a las 13:45
  #4 (permalink)  
Antiguo 21/04/2011, 17:07
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: seleccionar elementos de un arreglo que coincidan con un campo de una tabl

Cita:
Iniciado por jane985 Ver Mensaje
... Estuve mirando el codigo que me enviaste y creo que el primer código (mysql) no es lo que quiero realmente , ...
Seguramente, pero yo solamente mostré un ejemplo de 'cómo' puedes hacerlo siguiendo esa base, aunque tengas que modificarlo o volverlo a hacer.

Posiblemente esto es lo que quieres hacer,

Código PHP:
Ver original
  1. "
  2. SELECT
  3.  a.`categories_id`,
  4.  a.`categories_name`,
  5.  b.`parent_id`,
  6.  b.`categories_id`,
  7.  b.`categories_description`
  8. FROM
  9.  `categories` a
  10. INNER JOIN
  11.  `categories_description` b ON a.`categories_id` = b.`parent_id`
  12. WHERE
  13.  b.`categories_name` LIKE '%$categoria%' AND
  14.  b.`categories_descripcion` LIKE a.`categories_name`
  15. ORDER BY
  16.  a.`categories_id`
  17. "

Saludos,

Última edición por HackmanC; 21/04/2011 a las 17:14 Razón: Whoops y arreglar el código para que sea mas claro.
  #5 (permalink)  
Antiguo 21/04/2011, 17:33
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: seleccionar elementos de un arreglo que coincidan con un campo de una tabl

Hola,

Básicamente es esto, aunque tienes que adecuarla exactamente a lo que necesitas,

Código MySQL:
Ver original
  1.   a.`categories_id`,
  2.   a.`categories_name`,
  3.   b.`categories_id`,
  4.   b.`categories_name`,
  5.   b.`categories_description`
  6.   `categories` a
  7.   `categories_description` b ON a.`categories_id` = b.`categories_id`
  8.   b.`categories_name` LIKE '%Acci%' AND
  9.   b.`categories_description` LIKE CONCAT('%', a.`categories_name`, '%')
  10.   a.`categories_id`

Es solamente una idea para que la adecues a lo que necesitas exactamente,

Saludos,
  #6 (permalink)  
Antiguo 27/04/2011, 07:45
 
Fecha de Ingreso: marzo-2011
Mensajes: 15
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: seleccionar elementos de un arreglo que coincidan con un campo de una tabl

Hola muchísimas gracias por toda la ayuda prestada ,disculpa que me haya demorado tanto para contestar pero tuve unos problemillas, pero ya estoy de vuelta otra vez, he adecuado el código asi:

Código PHP:

$qry 
="SELECT  a.`categories_id`,

 a.`parent_id`,
 
  b.`categories_name`,

 b.`categories_id`,


FROM

 `categories` a

INNER JOIN

 `categories_description` b ON a.`categories_id` = b.`categories_id`

WHERE

 b.`categories_name` LIKE '%informática%' AND

 a.`parent_id`=50
ORDER BY
  a.`categories_id`"
;
 

$result1 mysql_query($qry) or die(mysql_error());

while(
$row mysql_fetch_array($result1)){
$prod_id $row['categories_id']; 
echo 
"$prod_id";      


y cuando ejecuto mi script me da el siguiete error:



C:\wamp\bin\php\php5.3.0>php.exe test3.php

You have an error in your SQL syntax; check the manual
orresponds to your MySQL server version for the right syntax to use near '

`categories` a

INNER JOIN

`categories_description` b ON a.`categ' at line 11



Que debo cambiar ?, alguna sugerencia por favor

Saludos
  #7 (permalink)  
Antiguo 27/04/2011, 07:48
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: seleccionar elementos de un arreglo que coincidan con un campo de una tabl

Tienes una coma de más detrás del último campo en el SELECT. Obviamente borraste algo detrás de eso, sin cuidar la sintaxis.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 27/04/2011, 08:02
 
Fecha de Ingreso: marzo-2011
Mensajes: 15
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: seleccionar elementos de un arreglo que coincidan con un campo de una tabl

Ahora si me funcionó perfecto , disculpen el descuido.

Muchas gracias gnzsoloyo.
  #9 (permalink)  
Antiguo 27/04/2011, 08:30
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: seleccionar elementos de un arreglo que coincidan con un campo de una tabl

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: php
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 04:24.