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

[SOLUCIONADO] Obtener datos, pasar como variable, y eliminar de dos bases de datos distintas

Estas en el tema de Obtener datos, pasar como variable, y eliminar de dos bases de datos distintas en el foro de Mysql en Foros del Web. Muy buenas a todos. Estoy haciendo para mi comunidad de Counter-Strike un sistema de administradores en una base de datos, que desde un panel puedo ...
  #1 (permalink)  
Antiguo 06/02/2014, 15:25
 
Fecha de Ingreso: febrero-2014
Mensajes: 3
Antigüedad: 10 años, 9 meses
Puntos: 0
Pregunta Obtener datos, pasar como variable, y eliminar de dos bases de datos distintas

Muy buenas a todos.

Estoy haciendo para mi comunidad de Counter-Strike un sistema de administradores en una base de datos, que desde un panel puedo agregar, suspender y quitar administradores y automáticamente en los servidores tiene efecto.

Con suerte logré hacer el panel, siendo que mis conocimientos con MySQL y PHP al principio eran nulos, pero quedó tan bien que quedé sorprendido

Hasta ahora, todo funciona excelente. Lo único que faltaría es hacer que detecte el vencimiento del usuario y lo elimine de la tabla, y además modificar un valor de otra base de datos (que sería el foro de la comunidad), pero siendo sincero mis conocimientos acá no llegan, ya que empecé con esto hace un poco más de dos semanas.

La idea en un principio era hacer mediante EVENTS que los quite a los administradores y las suspensiones por ahí, pero da justamente que el servidor en donde estamos alojados no admite esta funcionalidad, por lo que no nos queda otra que utilizar CRON JOBS, ejecutando un PHP para que esto pueda realizarse.

Necesito obtener los usuarios cuyo administrador se encuentra vencido:
Código SQL:
Ver original
  1. SELECT * FROM basededatos.tabla1 WHERE DATE(vencimiento) <= DATE(NOW());
  2. SELECT * FROM basededatos.tabla2 WHERE DATE(vencimiento) <= DATE(NOW());
  3. SELECT * FROM basededatos.tabla3 WHERE DATE(vencimiento) <= DATE(NOW());

Luego, obtener de esa selección su correspondiente ID del foro, que se encuentra en una columna (si no me equivoco, podría pasarlo como variable).

Posteriormente, debo eliminar esas filas (administradores) y, a la vez, modificar el valor de la base de datos del foro (IPBoard):
Código SQL:
Ver original
  1. UPDATE basedatosforo.members SET member_group_id = 9 WHERE member_id = '---ID DE LOS ADMINISTRADORES---'

Al principio había hecho algo parecido a esto:
Cita:
Editado: Código de programación no permitido en foros de Bases de Datos.
Leer las reglas del foro, pro favor.
Funcionaba obteniendo de un SELECT anterior la cantidad de filas según administradores vencidos haya, y ejecutar lo que está dentro del for esa cantidad, pero a veces o quitaba uno de los administradores, o los quitaba todos pero no les modificaba su valor en el foro.

Perdón por haber sido tan extenso, y agradecería demasiado si me pudieran dar una mano. Esta es una muy buena comunidad y cuando me surgió este inconveniente no dudé ni un segundo en consultar acá.

Saludos y buenas tardes/noches.

Última edición por elmasterx; 06/02/2014 a las 17:03
  #2 (permalink)  
Antiguo 07/02/2014, 04:13
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Obtener datos, pasar como variable, y eliminar de dos bases de datos disti

Código MySQL:
Ver original
  1. UPDATE basedatosforo.members
  2.        SET member_group_id = 9
  3. WHERE member_id IN
  4.             (SELECT member_id
  5.                     FROM basededatos.tabla1
  6.                     WHERE DATE(vencimiento) <= DATE(NOW())
  7.              UNION ALL
  8.              SELECT member_id
  9.                     FROM basededatos.tabla2
  10.                     WHERE DATE(vencimiento) <= DATE(NOW())
  11.              UNION ALL
  12.              SELECT member_id
  13.                     FROM basededatos.tabla3
  14.                     WHERE DATE(vencimiento) <= DATE(NOW()));

Los identificadores de las tablas 1, 2 y 3 son únicos incluso entre tablas? Si no tendriamos que ver como los diferenciamos.....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 07/02/2014, 09:19
 
Fecha de Ingreso: febrero-2014
Mensajes: 3
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Obtener datos, pasar como variable, y eliminar de dos bases de datos disti

Sí, son únicos :) Después si quisiera, además de actualizar el ID, borrar cada una de las líneas vencidas, ¿dónde debo agregar el "DELETE FROM..." ? ¿Aparte y usar mysqli_multi_query o se puede poner dentro del mismo código?

(Por cierto, todo esto iría en un PHP, y no tenía ni idea donde publicarlo (sección PHP o MySQL), lo lamento si publiqué código no permitido)

EDITO: Acabo de probar el código, y el grupo 9 se les asignó a todos los usuarios, ¿qué podría ser?

Última edición por elmasterx; 07/02/2014 a las 09:59
  #4 (permalink)  
Antiguo 07/02/2014, 10:06
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Obtener datos, pasar como variable, y eliminar de dos bases de datos disti

Entiendes la query?

Si se ha asignado a todos es que

Código MySQL:
Ver original
  1. SELECT member_id
  2.       FROM basededatos.tabla1
  3.       WHERE DATE(vencimiento) <= DATE(NOW())
  4. SELECT member_id
  5.       FROM basededatos.tabla2
  6.       WHERE DATE(vencimiento) <= DATE(NOW())
  7. SELECT member_id
  8.       FROM basededatos.tabla3
  9.       WHERE DATE(vencimiento) <= DATE(NOW())

Selecciona todos los id.....

La idea seria que resuelvas esa selección y la uses para hacer el update. Ejecuta primero la subquery para ver si da los resultados esperados.

En el caso del delete si se trata de borrar de Tabla1, 2 y 3 no tendràs mas remedio que hacer lo en tres querys...

Código MySQL:
Ver original
  1. DELETE FROM basededatos.tabla1
  2.     WHERE DATE(vencimiento) <= DATE(NOW());
  3.  
  4. DELETE FROM basededatos.tabla2
  5.    WHERE DATE(vencimiento) <= DATE(NOW());
  6.  
  7. DELETE FROM basededatos.tabla3
  8.   WHERE DATE(vencimiento) <= DATE(NOW());
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 07/02/2014 a las 10:13
  #5 (permalink)  
Antiguo 07/02/2014, 11:31
 
Fecha de Ingreso: febrero-2014
Mensajes: 3
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Obtener datos, pasar como variable, y eliminar de dos bases de datos disti

Funciona excelente! Había cometido un error al seleccionar la tabla, pero bueno, errar es humano.
Te agradezco toda la ayuda que me diste! Muchas gracias :)

Etiquetas: delete, php, query, select, update
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 09:01.