у меня 4 таблицы.Пользователи, Статьи, Langs, LangList
Таблица статей: ..., uid (Users.id), lang (Langs.id), ...
Таблица LangList: id, uid (Users.id), langid (Langs.id)
Я хочу выбрать все эти статьи для указанного пользователя (например, Users.id = 66),где находятся в его списке выбранных языков.
Если я сделаю это:
function FindActiveLangs($lang){
$sql ="SELECT langid FROM LangList WHERE `uid`= '66' AND `active`='1';";
$rsd = mysql_query($sql);
$lang_string = " ( ".$lang."lang = '0' ";
while($row = mysql_fetch_array($rsd)){
$lang_string .= " OR ".$lang."lang = '".$row['langid']."' ";
}
$lang_string .= " ) ";
return $lang_string;
} //end of FindActiveLangs
$tables = " Articles ";
$lang_string = FindActiveLangs("Articles.");
$where1 = "WHERE ".$lang_string." ";
$sql = "select distinct Articles.id, title, descr, thumb, relDate,
Articles.alias, Articles.lang, author, source
from ".$tables.$where1." and Users";
Я взял результаты в 0,01-0,03 секунды
Во-вторых, что я думаю, лучше для чистого кода:
$sql = "select distinct Articles.id, title, descr, thumb, relDate,
Articles.alias, Articles.lang, author, source
from Articles
where lang IN
(SELECT langid FROM LangList WHERE uid= '66' AND active='1')";
Я взял результаты в 1,1-1,3 секунды
Есть ли способ выполнить этот запрос, второй способ с лучшей производительностью?«IN» убивает скорость
Заранее спасибо ...