2013-06-11 4 views
0

В MySQL у меня есть 2 таблицы (в настоящее время MyISAM). Назовем их table1 и table2.Обновить запись в таблице1, если в таблице2 есть обновления (MySQL)

table1 имеет:

id 
passwd 
full_name 
email 

table2 имеет:

user_id 
book (the book's title) 

В принципе, пользователь может арендовать книги, и ряд создается в table2, с записями о user_id, и название книги пользователь арендован.

В таблице 1 я хотел бы добавить столбец «books_rented».

В PHP я могу рассчитать все строки, которые имеет x user_id, и он вернет количество книг, которые человек арендовал. Однако я хотел бы знать, возможно ли это сделать в самой MySQL, это казалось бы более оптимальным для меня.

PS: Я даю книги в качестве примера, поскольку я думал, что это упростит, но таблицы на самом деле являются отношениями работодателя/сотрудника. Если сотрудник удаляет свою учетную запись, то на самом деле это не будет оптимально делать это с PHP, так как нужно будет ждать, пока работодатель снова войдет в систему, чтобы обновить это. Я не могу сделать это с PHP, если не запускаю работу cron, которая мне не нравится.

+1

Вы пробовали 'SELECT COUNT (*) FROM table2 WHERE user_id = 1'? –

+0

Привет, спасибо за ваш ответ. Я добавил PS на свой пост, который объясняет, почему я пока не выбираю это. –

+1

Это точно так же, как спрашивать, почему я должен хранить дату рождения вместо моего возраста. –

ответ

0

Что такое связь между этими двумя таблицами, я предполагаю, что table1.id с table2.id.

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

Пожалуйста, попробуйте это на своем компьютере-разработчике.

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 

Я предлагаю вам работать с вашим дизайном, так как бывают случаи, что Вы будете: (? Будет ли это добавить к графе книг арендованной)

  • арендующим ту же книгу
  • вы считаете только книги, которые в настоящее время заимствованы? Или все книги, которые были арендованы до этого, включены?

С users и books являются many to many relationship, вам нужно добавить JUNCTION TABLE. Таким образом, вы получите: users, books и userbooks.

+0

Привет, Каэль, за ваш ответ. Если пользователь арендует книгу, он не может арендовать то же самое снова. Когда пользователь возвращает книгу, его строка удаляется. Таким образом, количество строк, которое у пользователя есть, - это количество книг, которые он в настоящее время арендовал. –

+0

Если это так, тогда запрос в моем ответе сделает это. Просто добавьте комментарий, если вам нужно больше вопросов или вы можете принять мой ответ. Благодаря! – KaeL