0

在 MySQL 中,我有 2 个表(目前是 MyISAM)。我们称它们为 table1 和 table2。

表 1 有:

id
passwd
full_name
email

表2有:

user_id
book (the book's title)

基本上,用户可以租书,并且在 table2 中创建一行,记录有关 user_id 和用户租借的书名。

在表 1 中,我想添加一个名为“books_rented”的列。

在 PHP 中,我可以计算 x user_id 拥有的所有行,它会返回该人租了多少本书。但是,我想知道是否可以在 MySQL 本身内做到这一点,这对我来说似乎更理想。

PS.:我以书籍为例,因为我认为它会使其更简单,但这些表格实际上是雇主/雇员关系的。如果员工删除了他的帐户,那么使用 PHP 这样做并不是最佳选择,因为它需要等到雇主再次登录才能更新它。除非我运行一个我不太喜欢的 cron 作业,否则我不能用 PHP 真正做到这一点。

4

3 回答 3

0

这两个表之间有什么关系,我假设 table1.id 与 table2.id。

update table1 set books_rented=(select count(*) from table2 where user_id=id)

请先在您的开发机器上尝试此操作。

于 2013-06-11T02:32:14.907 回答
0

我认为添加books_rented列是必要的。您可以简单query地获取特定用户租借的书籍数量。

SELECT T1.id
    , T1.passwd
    , T1.full_name
    , T1.email
    , IFNULL(COUNT(T2.book), 0) AS books_rented
    FROM table1 T1
    LEFT JOIN table2 T2 ON T2.user_id = T1.id
    GROUP BY T1.id

我建议您使用您的设计,因为在某些情况下您将:

  • 租同一本书(这会增加租借的书数吗?)
  • 您是否仅计算当前正在借阅的书籍?还是包括以前租过的所有书籍?

因为usersbooksmany to many relationship,您需要添加一个JUNCTION TABLE。所以你最终会得到usersbooksuserbooks

于 2013-06-11T02:47:30.453 回答
-1

触发器正是我想要的。很棒的教程

于 2013-06-11T20:44:00.863 回答