Php 查询存储在另一个表中的用户首选项的有效方法
我有两个表,第一个是存储用户详细信息的用户表,另一个是存储用户首选项的表。我有一个页面,管理员在其中选择首选项,并根据选择的首选项返回匹配的用户 目前,我通过从users表中选择所有用户并使用foreach循环查询每个使用的preferences表来实现这一点。请告诉我如何改进它。我目前使用的方法对大量记录执行得非常慢Php 查询存储在另一个表中的用户首选项的有效方法,php,mysql,Php,Mysql,我有两个表,第一个是存储用户详细信息的用户表,另一个是存储用户首选项的表。我有一个页面,管理员在其中选择首选项,并根据选择的首选项返回匹配的用户 目前,我通过从users表中选择所有用户并使用foreach循环查询每个使用的preferences表来实现这一点。请告诉我如何改进它。我目前使用的方法对大量记录执行得非常慢 首选项作为记录存储在首选项表中。您可以设置一个查询来提取信息。假设两个表中的id相同 SELECT * FROM users, user_prefs WHERE users.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
。假设您的表是用户
和首选项
,并且首选项
用户id
包含用户的id
,则查询如下
SELECT * FROM `users`
INNER JOIN `preferences` ON `users`.`id` = `preferences`.`userId`
WHERE (YOUR CRITERIA);
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`;
查看SQL连接语法“首选项存储为首选项表中的记录”,您可以进行1对多连接。谢谢我来看看。首选项不是列,而是作为记录存储在首选项表中。