Продолжение ВЫБОРА count (id) ИЗ tablename, ГДЕ username = «альфа»

#ruby #sequel

#ruby #продолжение

Вопрос:

Кажется, я не могу правильно выполнить этот запрос. Продолжение реализации:

 SELECT count(id) FROM users WHERE username = "alpha" AND status = "new"
  

Вот что у меня есть до сих пор:

 db = Sequel.connect('postgres://me:pw@0.0.0.0:5432/dbname)
u = db[:users]
puts "Total users: #{u.count}"  # this is correct
puts db.where(:username => "alpha", :status => "new").count
  

Я пробовал различные прямые SQL, и это, похоже, тоже не работает. Похоже, что это исправимо, но подключение в порядке, и я могу воспроизвести точный SQL, который не возвращается таким же.

Ответ №1:

Вы забыли выбрать таблицу. Вы хотите это:

 db[:users].where(username:'alpha', status:'new').count
  

Для SQLite3 это создает запрос:

 SELECT count(*) AS 'count'
FROM `users`
WHERE ((`username` = 'alpha')
  AND  (`status` = 'new'))
LIMIT 1
  

Сообщение об ошибке, которое вы должны были получить, было:

 NoMethodError: undefined method `where' for #<Sequel::SQLite::Database: ...>
  

Если вы увидели эту ошибку и прочитали ее, она должна была сообщить вам, что вызов db.where был неправильным.


В дополнение к выполнению этой работы с собственным Sequel DSL, вы также всегда можете запускать необработанные SQL-команды в Sequel.

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

1. Вторая строка — это таблица. Я действительно оставил это в последней строке.

2. @Rich_F Это расстраивает. Пожалуйста, скопируйте и вставьте точный код, не вводите на лету. Пожалуйста, отредактируйте свой вопрос с вашим фактическим кодом и фактической ошибкой, которую вы получаете.

3. Это вставленный текст. Я перепробовал много вариантов, и ни один из них не сработал. Я не перепечатываю свой код здесь.

4. 1) Это не может быть фактическим кодом. В первой строке содержится синтаксическая ошибка. 2) Вы говорите, что пробовали это с таблицей, но ваш код этого не показывает. 3) Вы все еще не показали ошибку, которую вы получаете, или то, что вы ожидали, и что вы получили вместо этого. Сказать, что это «не работает», недостаточно информации, чтобы мы могли сделать больше, чем просто догадаться о проблеме.

5. Кроме того, какие «различные прямые SQL» вы пробовали, с помощью какого кода и в чем заключалась ошибка или неправильный результат, который вышел с другой стороны?