#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»