php – Restar valor de una tabla al agregar otra?

¡Hola todos! Tengo esta estructura de datos:

Producto:

IDProducto
IDCategoria
IDAlmacen
ProductoNombre
Costo
Precio
Stock

Venta:

IDVenta
IDCliente
NumFactura
FechaCarga
FechaCancela
Estado
Total

Ventadetalle:

IDVentaDetalle
VentaID
IDProducto
Precio
Cantidad
Descuento
SubTotal

Necesito que al ingresar en la tabla Ventadetalle, en el campo Cantidad haga la resta en el campo Stock de la tabla Producto
Luego agregue el detalle del SubTotal de Ventas y cópielo en Total de la tabla Venta.
Como puedo realizar un trigger con este resultado?

php – Registrar dos tablas al mismo tiempo usando como FK en una tabla el ID de la otra

Tengo dos tablas

Usuario y Docente

Lo que quiero hacer es registrar un usuario, e inmediatamente despues registrar un nuevo Docente, pero este docente, deberá tener como FK la Pk del usuario que acabo de crear.

En la logica que tengo en mente, seria algo asi.

`Insert usuario......{{Aqui haria el insert de mi usuario}}`

Inmediatamente debajo haria otra consulta usando la funcion

`SELECT LAST_INSERT_ID();` 

Para obtener el ultimo ID registrado en mi tabla Usuarios y con este ID registrar mi Docente

`Insert Docente......{{Aqui haria el insert de mi Docente colocando como FK el ID de usuario}}`

Pregunto esto, porque habran muchos usuarios y docentes registrandose al mismo tiempo y tengo miedo de que en los pocos microsegundos entre registrar a mi usuario, extraer su ID y registrar el docente, otro usuario se registre y hayan errores.
Es una duda que tengo y quisiera poder aclararla o si esta es la forma correcta de hacerlo.

PDTA: Estoy trabajando con LARAVEL, si tienen una mejor forma de hacerlo con este Framework, me encantaría saberlo..

Llamando una clase desde otra clase en python no me reconoce un método

Tengo una clase que evalua una mano de poker y devuelve una lista cuyo primer número indica el tipo de jugada que tiene la mano (de este modo puedo hacer self.evaluaMano(mano1) > self.evaluaMano(mano2) para ver qué mano es más alta y por tanto se lleva el bote).

El archivo se llama calculos:

class Calculos():

    def __init__(self):
        print (self.evaluaMano(('Qs','Qc','Qh','5h','6s')))

    def isEscalera(self,nums):
        if set(nums)==set(('A','2','3','4','5')):
            return True,1
        elif set(nums)==set(('2','3','4','5','6')):
            return True,2
        elif set(nums)==set(('3','4','5','6','7')):
            return True,3
        elif set(nums)==set(('4','5','6','7','8')):
            return True,4
        elif set(nums)==set(('5','6','7','8','9')):
            return True,5
        elif set(nums)==set(('6','7','8','9','T')):
            return True,6
        elif set(nums)==set(('7','8','9','T','J')):
            return True,7
        elif set(nums)==set(('8','9','T','J','Q')):
            return True,8
        elif set(nums)==set(('9','T','J','Q','K')):
            return True,9
        elif set(nums)==set(('T','J','Q','K','A')):
            return True,10
        else:
            return False

    def evaluaMano(self,mano):
        totalcards = ('2s','3s','4s','5s','6s','7s','8s','9s','Ts','Js','Qs','Ks','As','2h','3h','4h','5h','6h','7h','8h','9h','Th','Jh','Qh','Kh','Ah','2d','3d','4d','5d','6d','7d','8d','9d','Td','Jd','Qd','Kd','Ad','2c','3c','4c','5c','6c','7c','8c','9c','Tc','Jc','Qc','Kc','Ac')
        fortaleza = ('2','3','4','5','6','7','8','9','T','J','Q','K','A')
        #nada retorna 0
        #pareja retorna 1
        #dobles parejas retorna 2
        #trio retorna 3
        #escalera retorna 4
        #color retorna 5
        #full retorna 6
        #poker retorna 7
        #escalera de color retorna 8
        nums = ()
        colors = ()
        color = False
        for iy in range (len(mano)):
            nums.append(mano(iy)(0))
            colors.append(mano(iy)(1))
        seen = {}
        dupes = ()
        for x in nums:
            if x not in seen:
                seen(x) = 1
            else:
                if seen(x) == 1:
                    dupes.append(x)
                seen(x) += 1
        if len(set(colors))==1:
            color = True
        if color:
            if self.isEscalera(nums):
                index = self.isEscalera(nums)(1)
                return 8,index
            else:
                index = 0
                index1 = fortaleza.index(nums(3))
                index2 = fortaleza.index(nums(4))
                if index1>index2:
                    index = index1
                else:
                    index = index2
                return 5,index,0,0
        if not color and len(set(nums))==5:
            if self.isEscalera(nums):
                index = self.isEscalera(nums)(1)
                return 4,index
            else:
                indexes = ()
                for num in nums:
                    index = fortaleza.index(num)
                    indexes.append(index)
                setindex = sorted(indexes, reverse=False)
                return 0,setindex(4),setindex(3),setindex(2),setindex(1),setindex(0)
        if not color and len(set(nums))==4:
            indexes = ()
            indexpair = 0
            for cartuki in seen:
                if seen(cartuki) == 2:
                    indexpair = fortaleza.index(cartuki)
                else:
                    index = fortaleza.index(cartuki)
                    indexes.append(index)
            kickers = sorted(indexes, reverse=False) #los ordena mal pro alfabético
            return 1,indexpair,kickers(2),kickers(1),kickers(0)
        if not color and len(set(nums))==3:
            trio = False
            cartatrio = ''
            indextrio = 0
            kickerstrio = ()
            kickerdobles = ''
            parejas = ()
            for cartuki in seen:
                if seen(cartuki)==3:
                    trio = True
                    cartatrio = cartuki
                elif seen(cartuki)==2:
                    parejas.append(cartuki)
                elif seen(cartuki)==1:
                    kickerstrio.append(cartuki)
                    kickerdobles = fortaleza.index(cartuki)
            if trio:
                indextrio = fortaleza.index(cartatrio)
                indexkick1 = fortaleza.index(kickerstrio(0))
                indexkick2 = fortaleza.index(kickerstrio(1))
                if indexkick1>indexkick2:
                    return 3,indextrio,indexkick1,indexkick2
                else:
                    return 3,indextrio,indexkick2,indexkick1
            else:
                indexpair1 = fortaleza.index(parejas(0))
                indexpair2 = fortaleza.index(parejas(1))
                i1 = 0
                i2 = 0
                if indexpair1>indexpair2:
                    i1 = indexpair1
                    i2 = indexpair2
                else:
                    i1 = indexpair2
                    i2 = indexpair1
                return 2,i1,i2,kickerdobles

        if not color and len(set(nums))==2:
            poker = False
            triofull = 0
            parejafull = 0
            for cartuki in seen:
                if seen(cartuki)==4:
                    poker = True
                    cartapoker = fortaleza.index(cartuki)
                elif seen(cartuki)==3:
                    triofull = fortaleza.index(cartuki)
                elif seen(cartuki)==2:
                    parejafull = fortaleza.index(cartuki)
            if poker:
                return 7,cartapoker
            else:
                return 6,triofull,parejafull


if __name__=='__main__':
    Calculos()

Esta clase funciona bien. python3 calculos.py devuelve (3, 10, 4, 3) ya que es un trío de reinas.

Sin embargo, tengo una segunda clase que procesa manos de Omaha. En este juego el Omaha se combinan dos cartas de las cuatro que recibes con tres de la mesa. Al llamar a esta clase desde una segunda clase para tratar de calcular las manos de Omaha que tiene un jugador no me procesa bien un método de la primera clase:

from itertools import combinations
from calculos import Calculos

class Flop():

    def __init__(self):
        cardsTable = ('As','Tj','7d')
        cardsPlayer = ('Ad','Th','6d','3s')
        self.calculaFlop(cardsTable,cardsPlayer)

    def calculaFlop(self,cardsTable,cardsPlayer):
        combinacionesPlayer =  list(combinations(cardsPlayer,2))
        for cards in combinacionesPlayer:
            mano = cards + cardsTable
            print (Calculos.evaluaMano(self,mano))

if __name__=='__main__':
    Flop()

python3 flop.py me da el siguiente error:

Traceback (most recent call last):
  File "flop.py", line 18, in <module>
    Flop()
  File "flop.py", line 9, in __init__
    self.calculaFlop(cardsTable,cardsPlayer)
  File "flop.py", line 15, in calculaFlop
    print (Calculos.evaluaMano(self,mano))
  File "/home/manu/Escritorio/OMAHA/calculos.py", line 76, in evaluaMano
     if self.isEscalera(nums):
AttributeError: 'Flop' object has no attribute 'isEscalera'

¿Por qué no me reconoce el método isEscalera cuando llamo la clase desde la segunda clase?

java – Como usar variables de una clase en otra

Digamos tengo una clase principal, en ella uso setters para mandar unas variables int a una clase secundaria, todo va bien hasta aqui porque por medio de getters en la clase principal me imprime todo bien, entonces en una tercera clase quiero hacer operaciones con las variables int, lo intente haciendolo atravez de getters desde la clase secundaria a la tercera pero al momento de hacer operaciones o usar un get me da 0

java – Crea una función que dada una matriz de valores enteros retorne otra matriz con los valores de la matriz original sin duplicados

Estoy repasando el tema de arrays por medio de funcionalidades, antes de empezar con colecciones. Pero ando un poco perdido con este ejercicio. A ver si me podeis ayudar.
El ejercicio me pide devolver una matriz, no modificarla, en la que solo aparezca por pantalla los valores de los indices que no se repitan. Para ello tengo dos funciones como podeis ver en el codigo. Una que valida si se repite algún valor o no. Si se repite, solo presentará en pantalla los valores sin tener en cuenta los valores repetidos.

`

public static void main(String() args) {
    // TODO Auto-generated method stub
    int()m=new int(){5,1,1,9,8,7,8,10};
    boolean respuesta=false;
    int()r;
    respuesta=in(m,8,8);
    if(respuesta==true) {
        r=noDuplicado(m);
        System.out.println(Arrays.toString(r));
    }
    System.out.println(Arrays.toString(m));
    
}

static boolean in( int() array, int value, int count ) {
    boolean respuesta=false;
    int contador=count;
    for (int i = 0; i < array.length; i++) {
        if(array(i)==value) {
            count++;
        }
        respuesta=true;
    }
    return respuesta;
}

static int()noDuplicado(int()matriz){
    int()copia=Arrays.copyOf(matriz, matriz.length);
    for (int i = 0; i < copia.length; i++) {
        if(copia(i)==copia(i+1)){
        copia(i)=copia(i+1);    
        }
        
    }
    
    return copia;
}

`

python – Cómo puedo hacer que una imagen aparezca en un lugar y luego aparezca en otra ubicación, y luego en otra y así varias veces?

Quiero que al presionar un botón se cree un comando para que desaparezca un png al cabo de unos segundos, y luego aparezca en otra ubicación, y luego en otra a los pocos segundos, y luego en otra, como si se estuviera moviendo. Traté de hacerlo con varias definiciones, con dormir y con el widget de destrucción, pero todavía aparece todo al mismo tiempo y no sé cómo corregirlo. Creo que se podría hacer con “for” pero todavía no sé cómo usarlo. Me ayudan porfavor?

def destroy_widget(widget):
    widget.destroy()
    
def texto():
    link=tk.StringVar()
    no=tk.Label(ventana,text="Hay algo en el camino...",font=("Times",18,"bold"),anchor='n',width=24, height=3,bg="#137420", fg="#9AD51A",bd=25,relief = "ridge")
    no.place(x=430,y = 400,anchor ='center')
    caja = tk.Entry(ventana,textvariable=link,width=50,state="readonly")
    caja.place(x=430,y = 410,anchor ='center')
    lin="https://www.tumblr.com/blog/mundo000011"
    link.set(lin)

def saliendo():
    canvas.delete(ima)
    ima2 = canvas.create_image(247,780,image=myimg)
    ventana.after(5000, destroy_widget, ima2)
    ima3 = canvas.create_image(247,500,image=myimg)
    ventana.after(5000, destroy_widget, ima3)
    texto()



def salir():

    if trad("text")=="ar.ab.iz.":
        
        trad.config(text=leta)
        saliendo()

ventana=tk.Tk()
ventana.title("Bosque")
ventana.geometry('900x800')
ventana.resizable(0,0)

myimg = tk.PhotoImage(file='circlo.png')
posx=70
posy=235
ima = canvas.create_image(78,235,image=myimg)

boton2 = tk.Button(text="  Ir  ",font=("Verdana",16), command=salir)
boton2.config(bg="#135C3F", fg="#D7D731")
boton2.place(x=746,y=379)

Como uno una clase con otra en Python (POO – Herencia Múltiple)

No tengo la mas mínima idea de como hacer para que el calculo de una clase que hice llamada Sueldo (De un archivo llamado Salario), la clase Employee (De un archivo llamado Empleado) pueda usarla…

class Sueldo():
    def __init__(self, hTrabajadas):
        self._hTrabajadas = hTrabajadas
    
    #Metodos @property y .setter
        
    def calculoSueldo(self):
        hBase = 40
        sueldoBase = self._hTrabajadas * 300
        hExtra = self._hTrabajadas - hBase
        sueldoExtra = sueldoBase + (hExtra*400)

        if self._hTrabajadas <= 40:
            return f"${sueldoBase}"
        elif self._hTrabajadas > 40:
            return f"${sueldoExtra}"

La cuenta de calculoSueldo() quiero que pueda usarse en esta Clase:

from Persona import Human
from Salario import Sueldo

class Employee(Human, Sueldo):
    def __init__(self, name, surname, age, dni, email, cellphone, hTrabajadas):
        Human.__init__(self, name, surname, age)
        Sueldo.__init__(self, hTrabajadas)
        self._dni = dni
        self._email = email
        self.cellphone = cellphone

    #Metodos @property y .setter

    def showdata(self):
        return f"nNombre: {self._name}nApellido: {self._surname}nEdad: {self._age}nDNI: {self._dni}nEmail: {self._email}nTelefono: {self._cellphone}nSalario: {self._hTrabajadas}"

En showdata(), en la parte de Salario: {self._hTrabajadas} , es donde me trabé y no puedo terminar el código

Código de prueba final:

from Empleado import Employee

name = input("Nombre: ")
surname = input("Apellido: ")
age = int(input("Edad: "))
dni = int(input("DNI (Sin puntos): "))
email = input("Email: ")
tel = int(input("Telefono: "))
hTrabajadas = int(input("Horas trabajadas: "))

emp1 = Employee(name, surname, age, dni, email, tel, hTrabajadas)
print(emp1.showdata())

El problema esta en que puse hTrabajadas y obviamente no me va a devolver la cuenta, pero no se como resolverlo

Quien pueda ayudarme lo agradezco mucho 😀

¿Es posible insertar datos de una tabla a otra sin usar foreign keys en MySQL usando JAVA?

Actualmente me encuentro haciendo un sistema de inventario muy simple para una empresa.
Básicamente solo necesitan ingresar datos de equipos individuales y asignarlos a usuarios previamente registrados.
Al realizar mi base de datos, mi lógica inmediata fue hacer una relación entre mi tabla con datos de empleados y la de equipos.
El problema llegó al darme cuenta de que necesito poder ingresar equipos sin usuario asignado, ya que al ser un almacén, pueden existir equipos sin asignar o que sean asignados múltiples veces.
Pensaba en dejar de relacionar las tablas, y solamente dejar un campo varchar en equipo para ingresar el nombre del usuario mediante java. Pero acá viene otro problema, si hago eso, no podré consultar que usuarios tienen que equipos. ¿Como puedo dar una solución efectiva?
Otra solución que pensé fue hacer una tabla intermedia que trajera los datos desde ambas tablas, pero me parece algo complicado dado mi limitado conocimiento en MySQL, así que no estoy seguro de que sea viable.

Me encuentro con poca experiencia en el tema y estaría muy agradecido con ustedes si me dan una respuesta. Gracias.

c# – Poner codigo SQL de otra manera en Visual Studio

Tengo una duda, hace meses trabaje en varios proyectos web, y yo tenia la costumbre de poner siempre el código SQL puro en el manejo de las consultas desde el lenguaje de programación usado, ya sea C# o .NET, y me comentaron que esa es la forma mas insegura de hacer la aplicación por la cuestión de algún ataque que se pueda presentar, entonces recuerdo que existe una manera tanto de conectar hacia la base de datos como hacer las consultas que no expone uno fácilmente el código SQL.

Espero me puedan ayudar, y si necesitan alguna SS de que pudiera ser ya que no veo viable poner de mi código.

c – Funcion llamada dentro de otra funcion no funciona

Cuando mando a llamar la funcion Ambas_Dos() que a su vez llama las funciones Producto() y Division()
sólo manda correcto el primer parámetro, osea Producto(). Lo que me imprime para el parámetro División() es el valor “y” ingresado por el usuario al inicio y no la operación de la función.

En otras palabras:

Cuando se manda a llamar la función Division() por si sola, si hace la operación pero al mandarla a llamar dentro de la funcion Ambas_Dos() manda el valor de “y” definido por el usuario y no su resultado de operacion, a diferencia de la función Producto() que si lo hace bien al ser llamada dentro y fuera de la funcion Ambas_Dos(). ¿Qué estoy haciendo mal?

Aquí mi codigo:

/* Escribir una funcion que llame a las otras dos funciones. */

#include<stdio.h>

float Producto(float a, float b); //funcion 1
float Divisor(float a, float b);  //funcion 2
float Ambas_Dos(float a, float b); //funcion que llame a otras 2 funciones.

float x,y;

int main()

{

 /*PROGRAMA QUE CALCULA EL PRODUCTO Y LA DIVISION DE DOS NUMEROS */

 printf("Ingrese dos numeros: n");
 scanf("%f %f", &x, &y);


Ambas_Dos(x,y); //llamada de funcion que llamara a su vez a las otras dos funciones

//Producto(x,y) = parametro x de Ambas_Dos(x,y)
//Divisor(x,y) =  parametro y de Ambas_Dos(x,y)

printf("El producto de %f y %f es: %.10f n",x,y, Producto(x,y)); //Funcion Producto()
printf("La division de %f y %f es: %.10f n",x,y, Divisor(x,y));  //Funcion Divisor()
printf("Llamado de la funcion Ambas_Dos es Producto(x,y): %f y Division(x,y): %fn", Ambas_Dos(x,y));


return 0;
}

//Declaracion de la funcion Producto
float Producto(float a, float b)
{
return(a*b);
}
 
//Declaracion de la funcion Division
float Divisor(float a, float b)
{
if(b==0)
{
printf("Valor del segundo numero es invalido, no debe ser 0.n");
}
else
{
return(a/b);
}
}

//Declaracion de la funcion Ambas_Dos
float Ambas_Dos(float a, float b)
{   float c, d; //variables locales

Producto(x,y);  //parametro a = c = Producto(x,y)
c = Producto(x,y);
return c;
Divisor(x,y);   //parametro b = d = Divisor(x,y)
d = Divisor(x,y);
return d;
}