2010-08-19 2 views
1

Использование сайта, как StackOverflow в качестве примера:MySQL Оптимизация записи существование

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

userID (int 8) 
questionID (int 8) 

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

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

Вопрос 1: Что? (вы это задали)
Вопрос 2: Кто?
Вопрос 3: Почему? (вы спрашивали об этом)

+0

В чем конкретно заключается ваш вопрос/проблема? – Sarfraz

+0

Я отредактировал, чтобы ответить на точный вопрос. – Chetan

ответ

3

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

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.

+0

Плюс один, потому что это хорошая идея. Опять же, это совершенно другая история, если сопоставление пользовательских вопросов находится в другой таблице –

+0

@Michael Clerx: Meh, просто JOIN, если это так. –

+0

Спасибо за ваш ответ! Однако сопоставления пользовательских вопросов находятся в другой таблице, поэтому как бы я это сделал? – Chetan

Смежные вопросы