2013-11-26 5 views
0

У меня действительно длинный список . То есть:Дополнительный запрос для каждого элемента?

$query = mysql_query("SELECT i.id 
      ORDER by i.id DESC LIMIT 0, 200"); 
while($row = mysql_fetch_array($query)){ $num_row++; 
} 

Выходы:

[ПУНКТ 1] [ПУНКТ 2] [ITEM 3] ... [ITEM 200]

Вот вещь. Мне нужно проверить каждый предмет, если у пользователя есть Понравилось. Должен ли я запускать дополнительный запрос для каждой строки первого запроса элемента? Мы говорим о 200 запросах ... Есть ли возможность присоединиться к этому запросу в первый?

Я думал о структурировании "как" стол, как так:

id, item_ref, user_id 
---------------------- 
1,  1,  5 
1,  5,  5 
1,  3,  5 

Если отображается, когда вошли в систему как user_id 5:

[ITEM 1 понравилось] [ПУНКТ 2] [ITEM 3 понравилось] [ПУНКТ 4] [ДЕТАЛЬ 5 понравился] ... [ITEM 200]

Любые советы?

Большое спасибо!

ответ

1

Вы можете присоединиться к подобной таблице и использовать ее, чтобы узнать, есть ли у определенного пользователя. Вы пропустите немного вашего запроса, но что-то вроде (предполагается, что вы используете как таблицу вы упоминаете):

SELECT i.id, l.id IS NOT NULL AS liked 
FROM item i 
LEFT JOIN likes l ON (i.id = l.item_ref AND l.user_id = YOURUSERIDHERE) 
ORDER by i.id DESC LIMIT 0, 200 

liked в результатах, является ли или не существует, как для данного пользователя.

+0

Это похоже на работу! BTW $ row ['понравилось'] дает мне «1», когда true и «0», когда false, это правильно? – James

+1

@James Да, это правильно. MySQL считает ноль ложным и не равен нулю. PHP будет обрабатывать их правильно. – Jim

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