Получение определенных данных из базы данных

#mysql #ruby-on-rails #database #database-design

#mysql #ruby-on-rails #База данных #база данных-дизайн

Вопрос:

У меня возникла проблема с получением правильных данных из базы данных.

У меня есть таблица ПРОДУКТОВ с 3 столбцами:

 id, Name and Category 
  

И у меня есть таблица ДАННЫХ с 3 столбцами:

 id, Name, products_id(F.K)
  

Теперь предположим, что в моей таблице продуктов есть одна запись со значениями

 (1, "iPhone 6S", "Mobiles") 
  

И в таблице данных у меня есть несколько записей имен:

 iPhone 6s 16GB, 
iPhone 6s 32GB, 
iPhone 6s Plus 16GB, 
iPhone 6s Plus 32GB 
  

и так далее. Теперь я хочу iPhone 6s только, а не iPhone 6s Plus .

В приведенном ниже коде я обновляю products_id, где он сопоставляет название продуктов с именем ДАННЫХ. Делая это, я получаю оба iPhone 6s и iPhone 6s Plus

Я хочу только iPhone 6s .

 @P1 = Product.where(id: 1).pluck(:Name)
@arr = @P1[0].split
Data.where("Name like ? AND Name like ? AND Name like ? AND Name like ? ", 
            "%#{@arr[0]}%", 
            "%#{@arr[1]}%", 
            "%#{@arr[2]}%", 
            "%#{@arr[3]}%").update_all(products_id:1)
  

Теперь, используя приведенный выше код, я получаю products_id перед iPhone 6s и iPhone 6s Plus. Я не хочу, чтобы он размещался перед iPhone 6s Plus. Любой другой подход к этому также может быть полезен. Большое спасибо!

Комментарии:

1. Data.where(«регулярное ВЫРАЖЕНИЕ имени?», ‘your_regex_here’)

Ответ №1:

Если вы хотите точно соответствовать имени, выполняйте поиск по полной строке, а не по like .

  name = Product.where(id: 1).pluck(:Name)
 Data.where(Name: name).updated_all(products_id: 1)
  

Комментарии:

1. Это будет соответствовать только полной строке «iPhone 6s», в некоторых записях у меня есть «iPhone 6s 16GB»