次のように構造化されたMySQLデータベースに次の3つのテーブルがあります。
tblinvoices
ユーザー ID | ID | 税率 | 日にち
tblinvoiceitems
ユーザー ID | リッド
tblcustomfieldvalues
リッド | 値 | フィールド ID
私がやろうとしているのは、特定の日付範囲内にあり、税率が 0 で、fieldid が 5 で値が文字を含むすべての請求書番号 (tblinvoices.id) を見つけることです。
これは、これを達成するためにコードを使用した距離ですが、残念ながら機能していません。その理由はわかりません。これはかなり複雑であることを知っているので、アドバイスをいただければ幸いです。これに対する私の方法が正しいかどうかはわかりません。
SELECT DISTINCT id, date
FROM `tblinvoices`
INNER JOIN (SELECT userid,tblinvoiceitems.relid
FROM `tblinvoiceitems`
INNER JOIN `tblcustomfieldsvalues`
ON tblinvoiceitems.relid=tblcustomfieldsvalues.relid
WHERE `fieldid` =5
AND `value`
REGEXP '[A-Za-z]') tbl
ON tblinvoices.userid=tbl.userid
WHERE `taxrate` = 0
AND `date`
BETWEEN '2012-07-01' AND '2012-09-31'
単純化されていますが、まだ正しい結果ではありません:
SELECT DISTINCT i.id, i.date
FROM `tblinvoices` i
INNER JOIN `tblinvoiceitems` it ON it.userid=i.userid
INNER JOIN `tblcustomfieldsvalues` cf ON it.relid=cf.relid
WHERE cf.`fieldid` =5
AND cf.`value` REGEXP '[A-Za-z]'
AND i.`taxrate` = 0
AND i.`date` BETWEEN '2012-07-01' AND '2012-09-31'
GROUP BY i.id