查询存储在另一个表

时间:2015-10-02 15:27:54

标签: php mysql

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

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

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

3 个答案:

答案 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。假设您的表格为userspreferencespreferencesuserId包含用户的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`;