查询存储在另一个表上的用户首选项的有效方法


Efficient way to query user preferences stored on another table

我有两个表,第一个是存储用户详细信息的users表,另一个是存储用户首选项的表。我有一个页面,其中管理员选择首选项,并根据所选的首选项匹配的用户返回。

目前,我通过从users表中选择所有用户并使用foreach循环查询每个用户的首选项表来实现这一点。请给我一些建议,我该如何改进它。我目前使用的方法对于大量记录执行非常慢。

首选项以记录的形式存储在首选项表中。

JOIN语法是哪里开始我不知道你的确切表布局,所以这里是一个例子

CREATE TABLE `user`( 
    `id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `Username` VARCHAR(200) NOT NULL,
    /* ... more columns here */
)
CREATE TABLE `user_prefs`( 
    `id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `user_id` INT(11) NOT NULL,
    `bg_color` VARCHAR(255) NOT NULL,
    /* ... more columns here */
)

那么你可以使用

来加入它们
SELECT * FROM `user` AS U JOIN `user_prefs` AS UP ON U.`id` = UP.`user_id`;

您可以设置一个查询来获取信息。假设两个表中的id相同

SELECT * FROM users, user_prefs WHERE
users.id = user_prefs.id AND
user_prefs.showads = 1 AND
user_prefs.sendemail = 1

您很可能想要研究使用SQL JOIN。假设您的表是userspreferencespreferencesuserId包含用户的id,查询将像这样

SELECT * FROM `users` 
  INNER JOIN `preferences` ON `users`.`id` = `preferences`.`userId` 
  WHERE (YOUR CRITERIA);