2015-10-02 1 views
1

У меня две таблицы: первая таблица пользователей, в которой хранятся данные пользователей, и другая таблица, в которой хранятся предпочтения пользователей. У меня есть страница, на которой администратор выбирает настройки и на основе выбранных предпочтений возвращаются согласованные пользователи.Эффективный способ запроса пользовательских настроек, сохраненных в другой таблице

В настоящее время я реализовал это, выбрав всех пользователей из таблицы users и используя foreach loop, запрашивая таблицу предпочтений для каждого использования. Пожалуйста, дайте мне идеи, как я могу улучшить его. Текущий подход, который я использовал, очень медленный для большого количества записей.

Настройки сохраняются в виде записей в таблице предпочтений.

+0

Go Посмотрите на SQL JOIN Синтаксис https://dev.mysql.com/doc/refman/5.0/en/join.html –

+0

«Настройки сохраняются как записи в таблице настроек», вы можете сделать соединение от 1 до многих. http://stackoverflow.com/questions/11807650/mysql-one-to-many-join –

+0

Спасибо. Я посмотрю на это. – shr3jn

ответ

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`; 
+0

Предпочтения не являются столбцами, а хранятся в виде записей в таблице предпочтений. – shr3jn

1

Вы можете настроить один запрос, чтобы извлечь информацию. Предположим, что id одинаковый в обеих таблицах.

SELECT * FROM users, user_prefs WHERE 
users.id = user_prefs.id AND 
user_prefs.showads = 1 AND 
user_prefs.sendemail = 1 
1

Вы, скорее всего, захотите изучить использование SQL JOIN. Предполагая, что ваши таблицы: users и preferences, и preferences. userId содержит пользователь id, запрос будет что-то вроде этого

SELECT * FROM `users` 
    INNER JOIN `preferences` ON `users`.`id` = `preferences`.`userId` 
    WHERE (YOUR CRITERIA); 
Смежные вопросы