假设我有2个型号:
class User
has_many :books
end
class Book
belongs to :user
end
让我们说这本书只有一个字段:标题。
如何查询没有标题书的用户" abc" ???
我尝试了以下内容:
User.left_outer_joins(:books).group("users.id, books.title").having("COUNT(books.title) = 0 or books.title != #{title}")
此查询的问题在于,如果用户有2本书(" abc"和" xyz"),它仍会返回它。
有什么想法吗?
答案 0 :(得分:0)
试试吧
using System; //lib that allow you to use DateTime
...
[HttpPost][ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "pkID,projectID,languageID,projectCompany,projectTitle,projectLink,projectText,projectImageURL,isPassive,createDateTime,createUsername,updateDateTime,updateUsername")] cusContentProjects cusContentProjects)
{
if (ModelState.IsValid)
{
db.cusContentProjects.Add(cusContentProjects);
var date = DateTime.now; //save it wherever you need
db.SaveChanges();
return RedirectToAction("Index");
}
return View(cusContentProjects);
}
生成的查询可以在User.joins(:book).where("books.title !=?","#{title}")
中查看为
rails console
答案 1 :(得分:0)
以下内容应该有效
User.joins(:books).group('books.user_id')
.having("SUM(IF(books.title = 'abc',1,0)) = ?", 0)
基本上只有用户拥有零书,标题为'abc'。
答案 2 :(得分:0)
也许最简单的方法是:
使用书籍中的uniq标题
<p th:text="${@mySession.getMessage()}"></p>
没有书中的uniq标题
book = Book.where(title: 'abc').first
user_id = book.user.id
User.where.not(id: user_id)
如果你想做组和拥有,那么你需要一个像
这样的SQLbooks = Book.where(title: 'abc')
users_ids = books.map { |b| b.user.id }
User.where.not(id: users_ids)
与AR
select users.id, IF(title = 'abc',1,0) has_book
from users
left join books b on user_id = users.id
group by id
having sum(has_book) = 0
我希望它有用:)