mysql:group by之前的复杂条件查询

时间:2014-08-20 18:21:09

标签: mysql

我有一个Postings表(包含人们发布他们提供的服务的数据)和一张与这些Posting作者相对应(写过邮件)的人员表,从而开始一个Transaction(插入第二个表:Transactions)。 每个过帐可以有很多交易。每次用户登录时,他/她(Transaction_Taker)都可以向他选择的作者(Posting_Author)发送邮件。 每个第一个邮件生成一个新的Transaction,其Transaction_Id(int)被附加到varchar,连字符分隔的Posting_Transaction_List字段中的Postings表中。 同一(登录)用户(也称为Transaction_Taker)发送的每个后续邮件的内容不会创建/插入新事务(没有插入到字段Posting_Transaction_List中),而是附加(更新)到最初由该发布的用户。

为了便于导航和搜索,一旦用户登录,我会显示所有这些帖子的ajax生成列表,这样每个帖子只显示一次虽然它可以有很多交易。换句话说,我需要显示所有可用帖子的列表,包括这个(已登录)用户已启动交易的帖子,但这些帖子(此用户正在进行交易的帖子)应显示,但我们应该不显示与其他用户的交易相同的发布。也就是说,只有登录用户才能看到他/她的交易。

假设我的表格包含字段:Posting_Id (int)Posting_Author (varchar)Posting_Content (text)Posting_Transaction_List (varchar)

...和包含字段的表格:Transaction_Id (int)Transaction_Posting_Id (int)Transaction_Taker_Id (int)

我(几乎)通过以下SQL实现我的目标:

$AlmostGoodSQL = "SELECT *, Posting_Id FROM Postings LEFT JOIN Transactions ON 
Postings.Posting_Id = Transactions.Transaction_Posting_Id WHERE Posting_Content 
LIKE '%"+$SomeSearchString+"%' GROUP BY Posting_Id";

问题是这显示了每个发布的不同实例,但不一定是与登录用户有关的实例(在有许多交易的情况下 - 包括她的 - 用于发布)。要做到这一点,我需要选择没有附加交易的所有过帐 PLUS那些只为此用户提供交易的人在执行分组之前。这是我无法实现的。我相信,由于' group by'你可以选择最大值或最小值,但不是完全匹配,比如说所有与用户有交易的帖子(Transaction_Taker)' 123456'。我认为" group by"显示它首先找到的任何实例。如何使其符合我的标准?

它看起来不像子查询,但更像是有条件的东西,例如:"搜索所有过帐以及过帐是否在Posting_Transaction_List中列出了一个指向Transaction_Taker_Id为的交易的交易其中一个登录用户($ UserId),然后清楚地显示它(只有那个,一次)" ...而且我不知道如何在SQL中完成所有这些:任何人都可以帮忙吗?

0 个答案:

没有答案