Foros del Web » Programando para Internet » PHP »

Intercambiar valores en una consulta

Estas en el tema de Intercambiar valores en una consulta en el foro de PHP en Foros del Web. Hola gente, tengo una pequeña duda que no he logrado resolver y quiero ver que me recomiendan hacer. Tengo una BD con 4 columnas: id_articulo_autores, ...
  #1 (permalink)  
Antiguo 06/11/2012, 10:16
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 140
Antigüedad: 13 años, 8 meses
Puntos: 1
Intercambiar valores en una consulta

Hola gente, tengo una pequeña duda que no he logrado resolver y quiero ver que me recomiendan hacer. Tengo una BD con 4 columnas: id_articulo_autores, id_autor, id_articulo, orden_autores, pongamos un ejemplo:
Código:
+-------------------+-------------+----------+---------------+
| ID_ARTICULO_AUTOR | ID_ARTICULO | ID_AUTOR | ORDEN_AUTORES |
+-------------------+-------------+----------+---------------+
|                 4 |           2 |       32 |             2 |
|                 5 |           2 |    13696 |             1 |
|                 6 |           2 |      513 |             3 |
|                 7 |           2 |      145 |             4 |
+-------------------+-------------+----------+---------------+
El caso es que necesito, desde PHP y haciendo consultas SQL incrementar o decrementar los valores de ORDEN_AUTORES a traves de un link vamos lo que se llama cambiar el orden. Suponiendo que quiera subir el ID_ARTICULO = 5 entonces donde dice ORDEN_AUTORES = 1 deberia decir 2 y su padre inmediato en este caso ID_ARTICULO = 4 deberia pasar a ORDEN_AUTORES = 1, me hago explicar? Alguna idea o ayuda?
__________________
Reynier Perez Mira
Skype: reynierpm
Site: http://www.reynierpm.com
  #2 (permalink)  
Antiguo 06/11/2012, 10:20
 
Fecha de Ingreso: abril-2009
Ubicación: en un lugar de la mancha
Mensajes: 236
Antigüedad: 15 años, 6 meses
Puntos: 38
Respuesta: Intercambiar valores en una consulta

En ID_ARTICULO todos los valores son 2 no hay ni 5 ni 4, estas hablando de ID_ARTICULO_AUTOR ?

lo siento pero por lo menos yo no capte la idea ke kieres
  #3 (permalink)  
Antiguo 06/11/2012, 10:21
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 140
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Intercambiar valores en una consulta

Ohhhh si perdon estoy hablando de ID_ARTICULO_AUTOR , gracias por la aclaración, edito el POST principal
__________________
Reynier Perez Mira
Skype: reynierpm
Site: http://www.reynierpm.com
  #4 (permalink)  
Antiguo 06/11/2012, 10:23
 
Fecha de Ingreso: abril-2009
Ubicación: en un lugar de la mancha
Mensajes: 236
Antigüedad: 15 años, 6 meses
Puntos: 38
Respuesta: Intercambiar valores en una consulta

Como sabes ke el padre inmediato es el 4 ?
  #5 (permalink)  
Antiguo 06/11/2012, 10:23
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 140
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Intercambiar valores en una consulta

Cita:
Iniciado por rolygc Ver Mensaje
En ID_ARTICULO todos los valores son 2 no hay ni 5 ni 4, estas hablando de ID_ARTICULO_AUTOR ?

lo siento pero por lo menos yo no capte la idea ke kieres
No me deja editar el POST principal
__________________
Reynier Perez Mira
Skype: reynierpm
Site: http://www.reynierpm.com
  #6 (permalink)  
Antiguo 06/11/2012, 10:25
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 140
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Intercambiar valores en una consulta

Cita:
Iniciado por rolygc Ver Mensaje
Como sabes ke el padre inmediato es el 4 ?
Hmmm, este codigo que dejo a continuacion es Active Record de CI:
Código PHP:
$this->db->select('*');
        
$this->db->where('ID_ARTICULO'$article_id);
        
$this->db->where('ID_AUTOR'$author_id);
        
$record $this->db->get('articulos_autores')->row();

        
$previous_id $record->ID_ARTICULO_AUTOR != $record->ID_ARTICULO_AUTOR $record->ID_ARTICULO_AUTOR;

        
$this->db->select('*');
        
$this->db->where('ID_ARTICULO'$article_id);
        
$this->db->where('ID_ARTICULO_AUTOR'$previous_id);
        
$previous_record $this->db->get('articulos_autores')->row();

        if (empty(
$previous_record)) {
            
$previous_id $record->ID_ARTICULO_AUTOR 1;
        }

        
$this->db->select('*');
        
$this->db->where('ID_ARTICULO'$article_id);
        
$this->db->where('ID_ARTICULO_AUTOR'$previous_id);
        
$previous_record $this->db->get('articulos_autores')->row();

        
$previous_order $record->ORDEN_AUTORES;
        
$actual_order = !empty($previous_record) ? $previous_record->ORDEN_AUTORES $record->ORDEN_AUTORES;

//        print_r($record);
//        echo '<br>';
//        echo $previous_id;
//        echo '<br>';
//        print_r($previous_record);
//        echo '<br>';
//        echo $previous_order;
//        echo '<br>';
//        echo $actual_order;
//        die();

        
if (!empty($previous_record)) {
            
$update_previous = array('ORDEN_AUTORES' => $previous_order);
            
$this->db->where('ID_ARTICULO_AUTOR'$previous_id);
            
$this->db->update('articulos_autores'$update_previous);
        }

        
$update_actual = array('ORDEN_AUTORES' => $actual_order);
        
$this->db->where('ID_AUTOR'$author_id);
        
$this->db->where('ID_ARTICULO'$article_id);
        
$this->db->update('articulos_autores'$update_actual); 
Fijate que lo primero que hago es un SELECT y obtengo el ID que necesito en este caso seria ID_ARTICULO_AUTOR = 5 y luego le resto uno para obtener el padre pero no me funciona
__________________
Reynier Perez Mira
Skype: reynierpm
Site: http://www.reynierpm.com
  #7 (permalink)  
Antiguo 06/11/2012, 10:25
Avatar de CoriaWeb  
Fecha de Ingreso: septiembre-2012
Ubicación: Coria del Río - Sevilla
Mensajes: 1.795
Antigüedad: 12 años, 2 meses
Puntos: 130
Respuesta: Intercambiar valores en una consulta

cuando alguien comenta tu ultimo post no te deja editarlo, solo puedes editar si nadie a respondido ;)
__________________
Hosting de Calidad
Servidores Dedicados Administrados
CoriaWeb.hosting
  #8 (permalink)  
Antiguo 06/11/2012, 11:00
 
Fecha de Ingreso: abril-2009
Ubicación: en un lugar de la mancha
Mensajes: 236
Antigüedad: 15 años, 6 meses
Puntos: 38
Respuesta: Intercambiar valores en una consulta

Ke framework estas usando ?? Codeigniter

De donde sale $article_id y $author_id ?

Cuantas filas devuelve la primera consulta ??
  #9 (permalink)  
Antiguo 06/11/2012, 11:08
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 140
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Intercambiar valores en una consulta

si estoy usando CodeIgniter y eso son variables q vienen dsd otro lado. La primera consulta sólo devuelve una sola fila fíjate en el uso de row() sino usará result()
__________________
Reynier Perez Mira
Skype: reynierpm
Site: http://www.reynierpm.com
  #10 (permalink)  
Antiguo 06/11/2012, 11:38
 
Fecha de Ingreso: abril-2009
Ubicación: en un lugar de la mancha
Mensajes: 236
Antigüedad: 15 años, 6 meses
Puntos: 38
Respuesta: Intercambiar valores en una consulta

OK por ejemplo para $article_id = 2 y $author_id = 513

primer query resultados

6 - 2 - 513 - 3

$previous_id = 5 porke es diferente de 1 y lo restas 6 - 1

segundo query buscas igual a 5 y 2

$previous_record = 5 -2 - 13696 - 1

no entra en el if porke $previous_record no esta vacio

busca de nuevo con valor 5 y 2 el $article_id este query puedes ponerlo dentro del if y asi evitar buscar nuevamente por el mismo valor.

$previous_order = 3 (primer query)

$actual_order = 1 (segundo query)

entra en el if porke $previous_record no esta vacio


cambia el valor de ORDER_AUTORES a 3 para el ID_ARTICULO_AUTOR = 5

y el ultimo update te actualiza tu tabla con la columna ORDEN_AUTORES = 1 donde el ID_AUTOR = 513 y el ID_ARTICULO = 2

o sea ke comenzo tu script con seleccionando este row

Código:
+-------------------+-------------+----------+---------------+
| ID_ARTICULO_AUTOR | ID_ARTICULO | ID_AUTOR | ORDEN_AUTORES |
+-------------------+-------------+----------+---------------+
|                 6 |           2 |      513 |             3 |
+-------------------+-------------+----------+---------------+
y termino upgradeando

Código:
+-------------------+-------------+----------+---------------+
| ID_ARTICULO_AUTOR | ID_ARTICULO | ID_AUTOR | ORDEN_AUTORES |
+-------------------+-------------+----------+---------------+
|                 5 |           2 |    13696 |             3 |
|                 6 |           2 |      513 |             1 |
+-------------------+-------------+----------+---------------+
creo ke esto es lo ke hace tu script o no ??

me parece ke debes cambiar la logica con ke tratas los datos y consulta para ke puedas manipular bien los datos en tu base de datos si e ske no estas logrando lo ke kieres

Última edición por rolygc; 06/11/2012 a las 11:56
  #11 (permalink)  
Antiguo 06/11/2012, 12:30
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 140
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Intercambiar valores en una consulta

Gracias por tu ayuda rolygc, despues de darme varios dolores de cabeza lo logré y este es el código en cuestión:
Código PHP:
public function executeActionAuthor($action$author_id$article_id) {
    switch (
$action) {
        case 
'up':
        
$this->db->select('*');
        
$this->db->where('ID_ARTICULO'$article_id);
        
$this->db->where('ID_AUTOR'$author_id);
        
$record $this->db->get('articulos_autores')->row();

        
$previous_order $record->ORDEN_AUTORES != $record->ORDEN_AUTORES $record->ORDEN_AUTORES;

        
$this->db->select('*');
        
$this->db->where('ID_ARTICULO'$article_id);
        
$this->db->where('ORDEN_AUTORES'$previous_order);
        
$previous_record $this->db->get('articulos_autores')->row();

        
$previous_order $previous_order 1;
        
$actual_order $record->ORDEN_AUTORES 1;

        if (
$previous_record->ID_ARTICULO_AUTOR != $record->ID_ARTICULO_AUTOR) {
            
$update_previous = array('ORDEN_AUTORES' => $previous_order);
            
$this->db->where('ID_ARTICULO_AUTOR'$previous_record->ID_ARTICULO_AUTOR);
            
$this->db->update('articulos_autores'$update_previous);

            
$update_actual = array('ORDEN_AUTORES' => $actual_order);
            
$this->db->where('ID_AUTOR'$author_id);
            
$this->db->where('ID_ARTICULO'$article_id);
            
$this->db->update('articulos_autores'$update_actual);
        }
        break;
        case 
'down':
        
$this->db->select('*');
        
$this->db->where('ID_ARTICULO'$article_id);
        
$this->db->where('ID_AUTOR'$author_id);
        
$record $this->db->get('articulos_autores')->row();

        
$previous_order $record->ORDEN_AUTORES 1;

        
$this->db->select('*');
        
$this->db->where('ID_ARTICULO'$article_id);
        
$this->db->where('ORDEN_AUTORES'$previous_order);
        
$previous_record $this->db->get('articulos_autores')->row();

        
$previous_order $previous_order 1;
        
$actual_order $record->ORDEN_AUTORES 1;

        if (!empty(
$previous_record)) {
            
$update_previous = array('ORDEN_AUTORES' => $previous_order);
            
$this->db->where('ID_ARTICULO_AUTOR'$previous_record->ID_ARTICULO_AUTOR);
            
$this->db->update('articulos_autores'$update_previous);

            
$update_actual = array('ORDEN_AUTORES' => $actual_order);
            
$this->db->where('ID_AUTOR'$author_id);
            
$this->db->where('ID_ARTICULO'$article_id);
            
$this->db->update('articulos_autores'$update_actual);
        }
        break;
        case 
'delete':
        
$this->db->where('ID_ARTICULO'$article_id);
        
$this->db->where('ID_AUTOR'$author_id);
        
$this->db->delete('articulos_autores');
        break;
        default:
        break;
    }
    } 
Saludos y gracias a todos
__________________
Reynier Perez Mira
Skype: reynierpm
Site: http://www.reynierpm.com

Etiquetas: codeigniter, mysql, ordenamiento
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 16:37.