使表的值等于另一个表中的另一个值

时间:2008-12-31 16:44:27

标签: python mysql

我写的程序有一个小问题。我有一张桌子 - 包含有关存放在冰箱里的物品的信息(产品,条形码等)的库存。然后我有另一张桌子 - 商店就像一个商店,包含大量的产品和他们的条形码。商店桌上的一些产品目前在库存表中,并且有一个名为stock的boolenan字段告诉我们是否该产品是否在库存表中,如果它等于1,它在冰箱里,如果它等于0,它不在冰箱里。股票表中的两个字段是金额和数量。数量是目前冰箱里的数量,数量必须始终在冰箱里。当从冰箱中取出物品时,该产品的金额会下降1.库存表中的每个条形码在商店表中都有一个匹配的条形码。我需要从python程序对数据库进行查询,当数量(冰箱里的数量)小于数量时(这意味着什么时候都在冰箱里),这将从商店表中订购产品。因此,您需要获取库存表中行数小于数量的行条形码,并将其与商店表中的条形码相匹配。然后在匹配条形码的行中,您需要设置stock = 1。

如果有人可以帮助我,我会很高兴,因为我发现很难写这个功能。如果有帮助,下面是签到和结帐功能。

def check_in(): 
    db = MySQLdb.connect(host='localhost', user='root', passwd='$$', db='fillmyfridge')
    cursor=db.cursor(MySQLdb.cursors.DictCursor)
    user_input=raw_input('please enter the product barcode that you wish to checkin to the fridge: \n')
    cursor.execute("""update shop set stock = 1 where barcode = %s""", (user_input))
    db.commit()
    numrows = int(cursor.rowcount)
    if numrows >= 1:
        row = cursor.fetchone()
        print row["product"]
        cursor.execute('update stock set amount = amount + 1 where product = %s', row["product"])
        db.commit()
        cursor.execute('udpate shop set stock = 1 where barcode = user_input')
        db.commit()
    else:
        new_prodname = raw_input('what is the name of the product and press enter: \n')
        cursor.execute('insert into shop (product, barcode, category) values (%s, %s, %s)', (new_prodname, user_input, new_prodname))
        cursor = db.cursor()
        query = ('select * from shop where product = %s', (new_prodname))
        cursor.execute(query):
        db.commit()
        numrows = int(cursor.rowcount)
        if numrows<1:
            cursor.execute('insert into atock (barcode, quantity, amount, product) values (%s, 1, 1, %s)', (user_input, new_prodname))
            db.commit()
            cursor.execute('insert into shop (product, barcode, category, stock) values (%s, %s, %s, 1)', (new_prodname, user_input, new_prodname))
            print new_prodname 
            print 'has been added to the fridge stock'
        else:
            cursor.execute('update atock set amount = amount + 1 where product = %s', (new_prodname))
            db.commit()
            cursor.execute('insert into shop (product, barcode, category, stock) values (%s, %s, %s, 1)', (new_prodname, user_input, new_prodname))
            print new_prodname 
            print 'has been added to the fridge stock'

结帐

import MySQLdb

def check_out():
    db = MySQLdb.connect(host='localhost', user='root', passwd='$$', db='fillmyfridge')
    cursor=db.cursor()
    user_input=raw_input('please enter the product barcode you wish to remove from the fridge: \n')
    query = cursor.execute('update stock set instock=0, howmanytoorder=howmanytoorder + 1, amount = amount - 1 where barcode = %s', (user_input))
    if cursor.execute(query):
        db.commit()
        print 'the following product has been removed from the fridge nd needs to be ordered'
        cursor.execute('update shop set stock = 0 where barcode = %s' (user_input)
        db.commit()
    else:
        return 0

2 个答案:

答案 0 :(得分:1)

所以,如果我说得对,你就有以下表格:

股票至少包含条形码金额数量

购物,至少包含条形码股票

我不明白为什么你需要商店表中的 stock 专栏,因为你可以通过这样的连接轻松获得有库存的产品:

SELECT barcode, ... FROM Stock ST JOIN Shop SH ON ST.barcode = SH.barcode;

显然,您还应该从Shop表中选择其他一些列,否则您只需从Stock表中选择所有内容。

您可以获得需要订购的产品清单(金额小于数量):

SELECT barcode FROM Stock ST WHERE ST.amount < ST.quantity;

答案 1 :(得分:0)

尽量缩短问题。我想这会产生更多的回应。