メールスレッド用の dbase ソリューションを作成しようとしています。メールを受信したとき.. このメールが既存のスレッドに属しているかどうかを知りたいです。
だから私は件名を一致させます。
また、送信者と受信者のペアを一致させたい
すなわち
(sender = 'A@gmail.com' and receiver = 'B@gmail.com')
また
(sender ='B@gmail.com' and receiver = 'A@gmail.com')
これらの正確なケースについて..このクエリはうまくいきました(詳細はこちらをご覧ください):
(SELECT COUNT(search_email.threadID) FROM search_email
WHERE search_email.subject MATCH '%query%' AND
(
(search_email.sender = '%sender' AND search_email.tos = '%receiver%')
OR
(search_email.sender = '%receiver%' AND search_email.tos = '%sender%')
)
問題は、次のような場合です。
(sender = 'Amanda Collins A@gmail.com' and receiver = 'B@gmail.com')
また
(sender ='Billy Bob B@gmail.com' and receiver = 'A@gmail.com')
明らかに.. MATCH 句 (またはいくつかの正規表現など) がここに用意されています..
問題は、sqllite での作業が許可されていないこと です:代わりにaが必要です..MATCH
OR
UNION
しかし、上記のステートメントを次のステートメントに変換する方法がわかりませんでしたUNION/INTERSECT
。
SELECT * FROM search_email WHERE
search_email.subject MATCH '%query%' INTERSECT SELECT * FROM
(SELECT * FROM (SELECT * FROM search_email WHERE
search_email.sender MATCH '%sender%'
INTERSECT SELECT * FROM search_email WHERE search_email.tos MATCH '%receiver%' )
UNION
SELECT * FROM( SELECT * FROM search_email WHERE search_email.sender MATCH '%sender%'
INTERSECT SELECT * FROM search_email WHERE search_email.tos MATCH '%receiver%'))
何か案は?
更新:
答えは、最初のものintersect
をに変更するだけのようですunion
:
SELECT * FROM search_email WHERE
search_email.subject MATCH '%query%' UNION SELECT * FROM
(SELECT * FROM (SELECT * FROM search_email WHERE
search_email.sender MATCH '%sender%'
INTERSECT SELECT * FROM search_email WHERE search_email.tos MATCH '%receiver%' )
UNION
SELECT * FROM( SELECT * FROM search_email WHERE search_email.sender MATCH '%sender%'
INTERSECT SELECT * FROM search_email WHERE search_email.tos MATCH '%receiver%'))
しかし、この解決策は非常に非効率的です..mysqlコンパイラはそれを理解するのに時間がかかります..もっと効率的な方法はありますか?