我有两个表,第一个是存储用户详细信息的users表,另一个是存储用户首选项的表。我有一个页面,管理员选择首选项,并根据所选首选项返回匹配的用户。
目前,我已经通过从users表中选择所有用户并使用foreach循环查询每个用户的首选项表来实现此目的。请给我一些想法如何改进它。我使用的当前方法对于大量记录执行速度非常慢。
首选项存储在首选项表中的记录中。
答案 0 :(得分:1)
您可以设置一个查询来提取信息。假设两个表中的id相同。
SELECT * FROM users, user_prefs WHERE
users.id = user_prefs.id AND
user_prefs.showads = 1 AND
user_prefs.sendemail = 1
答案 1 :(得分:1)
您很可能希望考虑使用SQL JOIN
。假设您的表格为users
和preferences
,preferences
。userId
包含用户的id
,则查询将是这样的
SELECT * FROM `users`
INNER JOIN `preferences` ON `users`.`id` = `preferences`.`userId`
WHERE (YOUR CRITERIA);
答案 2 :(得分:1)
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`;