Таблица пользователей:
User_id (Pk, AI) |Имя |Фамилия
1 |Джон |Доу
2 |Питер |Гриффин
3 |Дональд |Утка
Таблица предметов:
Item_id (PK, AI) |Владелец (FK - user_id) |Item_name
1 |1 |Обувь
2 |2 |Брюки
3 |3 |Рубашка
Таблица_обзоров предметов:
Идентификатор_обзоров предметов (PK, AI) |Item (FK - item_id) |Рецензент (FK - user_id) |Рейтинг |Содержание
1 |1 |2 |4 |Отлично
В приведенных выше таблицах я хочу проверить три вещи, прежде чем вставлять строку в таблицу обзора.
- Проверьте, не является ли рецензент владельцем владельца элемента (не может просмотреть собственный элемент или предвзятый отзыв)
- Проверка формы (если рецензент вводил что-либо в рейтинг и содержание)
- Проверить, существует ли отзыв (нет повторяющихся отзывов или только один отзыв на пользователя)
Это моя процедура, я сделал две другие, кроме первой, поскольку я не уверен и не понимаю, как это сделать.
Я мог бы просто использовать запрос get where, например:
public function check_biased_review($user_id, $item_id){
$this->db->select('*');
$this->db->from('item');
$this->db->where('item_id', $item_id);
$this->db->where('owner', $user_id);
$query = $this->db->get();
if($query->num_rows() > 0){
return TRUE;}
else{
return FALSE;}
}
Я на самом деле решил эту проблему, написав код выше, у меня было неправильное представление о том, что мне придется запрашивать столько строк, если есть много отзывов, чтобы найти совпадающие строки, которые я забыл о предложении where впервое место, которое будет делать это в БД вместо того, чтобы делать это в функции модели с циклом foreach и оператором if.Я полагаю, вам нужно сначала написать код, а не делать предположения и никогда не проверять его, иначе вы можете тратить время, как я.
Но мое первое решение состояло в том, чтобы использовать запрос соединения.$item_id
и $user_id
передаются от контроллера к модели.
Как мне объединить таблицы, чтобы получить тот же результат?