Foros del Web » Programando para Internet » PHP »

consulta sql array

Estas en el tema de consulta sql array en el foro de PHP en Foros del Web. Necesito una consulta sql para buscar si un numero está dentro de un array. Tengo una tabla autores, de la que extraigo el nombre de ...
  #1 (permalink)  
Antiguo 02/11/2007, 12:08
Avatar de mrgubu  
Fecha de Ingreso: febrero-2002
Ubicación: Granada
Mensajes: 431
Antigüedad: 22 años, 2 meses
Puntos: 2
consulta sql array

Necesito una consulta sql para buscar si un numero está dentro de un array.

Tengo una tabla autores, de la que extraigo el nombre de un autor y su id:

$sql = "SELECT * FROM autores WHERE id = '". $_GET['id']."' ";

La segunda tabla, articulos, tiene el campo idautor, que es un array tipo 1,5,8,14...

Lo que quiero es hacer un nuevo sql para seleccionar los articulos en cuyo campo idautor aparece la id del autor.

He probado diversas fórmulas pero no atino. A ver si me podéis ayudar.
  #2 (permalink)  
Antiguo 02/11/2007, 12:26
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Re: consulta sql array

Mmm... segun tu primera consulta... solo estarias buscando un autor... por lo tanto si quieres sacar toda la informacion de la tabla articulos de ese autor tendrias que hacer lo siguiente:
Código PHP:
$sql "SELECT * 
FROM autores, articulos
WHERE autores.id = '"
.$_GET['id']."'
AND autores.id = articulos.idautor"

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #3 (permalink)  
Antiguo 02/11/2007, 13:00
Avatar de mrgubu  
Fecha de Ingreso: febrero-2002
Ubicación: Granada
Mensajes: 431
Antigüedad: 22 años, 2 meses
Puntos: 2
Re: consulta sql array

No funciona. Además, por otras razones ajenas a este tema necesito hacer dos consultas distintas, primero sacar la id de la tabla autores y luego cotejarla con el campo idautor de la tabla articulos, teniendo en cuenta que el campo idautor es un array numerico del tipo 1,3,6,8..

LA consulta que quiero hacer es digamos como un
SELECT campo WHERE campo IN valor
pero al revés, me refiero que campo () es un array y valor es un numero, con lo cual la clásica consulta IN no sirve.
  #4 (permalink)  
Antiguo 02/11/2007, 13:16
Avatar de Seppo  
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.284
Antigüedad: 19 años, 1 mes
Puntos: 17
Re: consulta sql array

mrgubu, campo no necesariamente tiene que ser un campo... es valido hacer
Código:
SELECT * FROM country WHERE 150 IN (id, name);
Igualmente no entiendo que es lo que queres decir con que idautor, en la tabla de articulos, es un array
  #5 (permalink)  
Antiguo 02/11/2007, 13:34
Avatar de mrgubu  
Fecha de Ingreso: febrero-2002
Ubicación: Granada
Mensajes: 431
Antigüedad: 22 años, 2 meses
Puntos: 2
Re: consulta sql array

Perdonadme, quizás no me explico bien. Brevemente me explico de nuevo.

Tengo la tabla autores, cada uno con su id.
Tengo la tabla articulos, con el campo idautor, que es un array de numeros tipo 1,5,7,9 (Cada artículo puede estar escrito por varios autores, y lo que hago es almacenar los ids de los distintos autores de cada articulo en el campo idautor).

Así que quiero saber los articulos en los que ha participado un autor determinado.
  #6 (permalink)  
Antiguo 02/11/2007, 13:40
Avatar de Seppo  
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.284
Antigüedad: 19 años, 1 mes
Puntos: 17
Re: consulta sql array

No me aclaraste la duda... cómo tenés un array? En MySQL no hay un tipo de campo Array, hay tipo SET, o tenés un conjunto de números separados por coma en un campo de tipo string?
  #7 (permalink)  
Antiguo 02/11/2007, 14:01
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Re: consulta sql array

Parece que asi es... entonces primero saca todos los articulos y luego seleccionas todos los autores:
Código PHP:
$idAutor $_GET['id'];
$sql "SELECT *  
        FROM articulos"

$result mysql_query($sql);
while(
$data mysql_fetch_array($result)){
    
$tmp explode(',',$data['idautor']);
    for(
$i=0;$i<count($tmp);$i++){
        if(
$idAutor == $tmp[$i]){
            
$sql2 "SELECT * FROM autores WHERE id = ".$idAutor;
            
//y todo lo que viene....
        
}
    }

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #8 (permalink)  
Antiguo 02/11/2007, 14:12
Avatar de mrgubu  
Fecha de Ingreso: febrero-2002
Ubicación: Granada
Mensajes: 431
Antigüedad: 22 años, 2 meses
Puntos: 2
Re: consulta sql array

1. Efectivamente, el campo idautor de la tabla articulos es un conjunto de números separados por coma en un campo de tipo string.

2. Marvin, entiendo lo que haces pero ¿qué hago con las sql2 que genera tu consulta? Yo lo que quiero obtener al final son los articulos que ha escrito un determinado autor...
  #9 (permalink)  
Antiguo 02/11/2007, 14:19
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Re: consulta sql array

Ahh entonces no tienes para que ir a la tabla autores a menos que quieras sacar el nombre...

La consulta 2 es para sacar los datos del autor si los necesitas... por eso la deje ahi en veremos porque no se si necesitas sacarlos :P


Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #10 (permalink)  
Antiguo 02/11/2007, 15:56
Avatar de mrgubu  
Fecha de Ingreso: febrero-2002
Ubicación: Granada
Mensajes: 431
Antigüedad: 22 años, 2 meses
Puntos: 2
Re: consulta sql array

Pues sigo sin saber cómo hacerlo, por favor ayudadme
  #11 (permalink)  
Antiguo 02/11/2007, 17:00
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Re: consulta sql array

Ok... con el codigo que te deje arriba... lo que sacas es que ese ID de autor tiene X articulos...

La consulta 2 sacala y ponle unos echo $data['articulo'] o algo asi... ;)

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #12 (permalink)  
Antiguo 02/11/2007, 17:56
Avatar de mrgubu  
Fecha de Ingreso: febrero-2002
Ubicación: Granada
Mensajes: 431
Antigüedad: 22 años, 2 meses
Puntos: 2
Re: consulta sql array

ok al final he sacado lo que quería con la pista de Marvin: La diferencia es que necesito una sola sql para luego poder paginar bien. ES un poco chapucero, pero funciona:

Código PHP:

//Tengo una $id de un autor y
//QUIERO CONSEGUIR UNA SQL COMO LA DEL SIGUIENTE EJEMPLO, 
//con los ids de los articulos que ha escrito el autor:
//$sql="SELECT * FROM articulos WHERE id IN ( 13 , 18 , 19 , 27 , 33 , 51 )";

//Para ello comienzo a componer el sql definitivo
$sql "SELECT * FROM articulos WHERE id IN ( ";

//Antes cojo primero todos los articulos y sigo componiendo 
//la sql con los ids que figuran en el array de $row2['idautor']
            
$sql2 "SELECT * FROM articulos ";
            
$rs2mysql_query($sql2 $conn) or die(mysql_error()); 
            while(
$row2 mysql_fetch_array($rs2)){
                
$tmp explode(',',$row2['idautor']);
                for(
$i=0;$i<count($tmp);$i++){
                    if(
$id == $tmp[$i]){
                        
$sql.= "" .$row2['id']." ";
                        
$sql.= ", ";
                    }
                }
            }  

//Corto la cadena para eliminar la ultima coma y el ultimo espacio
$sqllenstrlen($sql);
$sql=substr ($sql0$sqllen-2);

//Y cierrro el paréntesis
$sql.= ")"

Última edición por mrgubu; 02/11/2007 a las 18:14
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:57.