Так что я работаю с запросами на пару лет, , а иногда я спрашиваю себя, нет ли более простого способа, или более сложный способ заставить его работать. Поэтому сегодня я столкнулся с ситуацией, когда у меня есть таблица, скажем пользователей, и я хочу сделать несколько сравнений с этой таблицей.Сравнение с таблицей в MySQL
В этом случае получите статистику от каждого пользователя, которого у меня есть: узнать, сколько заказов он сделал или сколько у него товаров в списке желаний за определенный период (ы) времени; например, на прошлой неделе и на этой неделе. Так что я хочу знать, если лучший способ заключается в использовании left joins
и ifs
так:
SELECT
users.id,
SUM(IF(wishlist.date = LAST_WEEK, 1, 0)) LAST_WEEK_WISHLIST,
SUM(IF(wishlist.date = THIS_WEEK, 1, 0)) THIS_WEEK_WISHLIST,
SUM(IF(orders.date = LAST_WEEK, 1, 0)) LAST_WEEK_ORDERS,
SUM(IF(orders.date = THIS_WEEK, 1, 0)) THIS_WEEK_ORDERS
FROM
users
LEFT JOIN wishlist ON users.id = wishlist.user_id
LEFT JOIN orders ON users.id = orders.user_id
...
GROUP BY users.id
ORDER BY users.id ASC
... или есть лучше или более оптимизированный способ сделать это.
Заранее спасибо
Просьба представить 'ШОУ CREATE TABLE' для 3 таблиц, а также сообщите нам, насколько велики таблицы. Кроме того, старые данные «статические»? То есть мы можем обобщить старые данные и только «вычислить» текущие данные? –
СОЗДАТЬ пользователей TABLE ( user_id INT NOT NULL AUTO_INCREMENT, электронной VARCHAR (80) NOT NULL, display_name VARCHAR (50) NOT NULL, пароль CHAR (41) NOT NULL, PRIMARY KEY (user_id), UNIQUE INDEX (электронная почта) ) ДВИГАТЕЛЬ = INNODB; –
CREATE TABLE WishList ( user_id INT NOT NULL, product_id INT NOT NULL, FOREIGN KEY (user_id) Лит пользователей (user_id), FOREIGN KEY (product_id) Лит продукты (PRODUCT_ID) ) –