Оптимизация существования записей MySQL - PullRequest
1 голос
/ 19 августа 2010

Использование сайта, такого как StackOverflow, в качестве примера:

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

userID (int 8)
questionID (int 8)

При отображении списка популярных вопросов я пытаюсь отметить вопросы, заданные вошедшим в систему пользователем. Более эффективно проверить, существует ли сопоставление пользовательских вопросов для каждого вопроса, или получить все сопоставления пользовательских вопросов для вошедшего в систему пользователя из базы данных один раз, и выполнить проверку на стороне сервера?

Вот наглядный пример вывода, который я хочу увидеть:

Вопрос 1: Что? (ты спросил это)
Вопрос 2: Кто?
Вопрос 3: почему? (ты спросил это)

1 Ответ

3 голосов
/ 19 августа 2010

Презентацию всегда следует оставлять на уровне презентации. Логика представления, основанная на упомянутых вами бизнес-правилах, быстрее, если она построена в базе данных:

SELECT q.title,
       CASE 
         WHEN uq.who_asked = @user_id THEN 1 
         ELSE 0 
       END AS isYourQuestion
  FROM QUESTIONS q
  JOIN USER_QUESTIONS uq ON uq.question_id = q.question_id

Затем вы можете использовать isYourQuestion, чтобы пометить приложение для отображения «(вы спрашивали это)», если значение равно 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...