我有两个表,第一个是存储用户详细信息的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
。假设您的表是users
、preferences
和preferences
。userId
包含用户的id
,查询将像这样
SELECT * FROM `users`
INNER JOIN `preferences` ON `users`.`id` = `preferences`.`userId`
WHERE (YOUR CRITERIA);