Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 查询存储在另一个表中的用户首选项的有效方法_Php_Mysql - Fatal编程技术网

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

Php 查询存储在另一个表中的用户首选项的有效方法,php,mysql,Php,Mysql,我有两个表,第一个是存储用户详细信息的用户表,另一个是存储用户首选项的表。我有一个页面,管理员在其中选择首选项,并根据选择的首选项返回匹配的用户 目前,我通过从users表中选择所有用户并使用foreach循环查询每个使用的preferences表来实现这一点。请告诉我如何改进它。我目前使用的方法对大量记录执行得非常慢 首选项作为记录存储在首选项表中。您可以设置一个查询来提取信息。假设两个表中的id相同 SELECT * FROM users, user_prefs WHERE users.id

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

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


首选项作为记录存储在首选项表中。

您可以设置一个查询来提取信息。假设两个表中的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对多连接。谢谢我来看看。首选项不是列,而是作为记录存储在首选项表中。