У меня есть этот запрос, который я хочу выполнить в моем PHP-приложении. Условно, лист - это БД, которая отслеживает все имеющиеся у нас листы. Закупки - это БД, которая отслеживает, какие пользователи имеют доступ к какому листу. Запрос, который я хочу выполнить, получает идентификатор пользователя, я могу получить все листы, к которым он должен иметь доступ. В форме запроса:
select distinct s.wsid, s.name from sheets s, purchases p where
s.wsid = p.wsid AND p.uid = *value*;
где значение - это что-то, введенное приложением
На мой взгляд, есть два способа заставить это работать на заднем конце.
Вариант 1)
public function getPurchasedSheets($uid){
if( is_numeric($uid) ){ //check against injections
$query = "select distinct s.wsid, s.name from sheets s, purchases p
where s.wsid = p.wsid AND p.uid = ".$uid.";" ;
return $this->db->query($query);
} else {
return NULL; //or false not quite sure how typing works in PHP
}
}
Вариант 2)
public function getPurchasedSheets($uid){
if( is_numeric($uid) ){
$this->db->select('wsid, name');
$this->db->distinct();
$this->db->from('purchases');
//not sure which order the join works in...
$this->db->join('sheets', 'sheets.wsid = purchases.wsid');
$this->db->where('uid ='.$uid);
return $this->db->get();
} else {
return NULL;
}
}
Источник для всех команд активной записи CodeIgniter:
codeigniter.com / user_guide / базы данных / active_record.html
Есть ли какая-то разница в производительности или безопасности по сравнению с тем или иным способом? Второй способ кажется мне гораздо более запутанным ... Это немного усложняется, потому что я не уверен, как сделать двусмысленную ссылку в этом стиле кодирования, потому что покупки и листы имеют поле uid, но они означают разные вещи (в дополнение к тому, что он не очень хорошо знаком с командой объединения SQL). Uid (идентификатор пользователя) в покупках означает, что пользователь приобрел этот лист, а Uid в листах указывает, кому принадлежит этот лист.
TL, DR: В сущности, я спрашиваю, есть ли причина, по которой я должен потратить время на то, чтобы понять, как действовать в двух вариантах?