以下はその状況です。注文テーブルとメッセージテーブルを接続する必要があります。しかし、私は最初のメッセージ(最低のメッセージID)だけに興味があります。テーブル間の接続はオーダーIDです。SQL - GROUB BY - HAVING - MISSING ROWS
$result = $this->db->executeS('
SELECT o.*, c.iso_code AS currency, s.name AS shippingMethod, m.message AS note
FROM '._DB_PREFIX_.'orders o
LEFT JOIN '._DB_PREFIX_.'currency c ON c.id_currency = o.id_currency
LEFT JOIN '._DB_PREFIX_.'message m ON m.id_order = o.id_order
LEFT JOIN '._DB_PREFIX_.'carrier s ON s.id_carrier = o.id_carrier
LEFT JOIN jtl_connector_link l ON o.id_order = l.endpointId AND l.type = 4
WHERE l.hostId IS NULL AND o.date_add BETWEEN DATE_SUB(NOW(), INTERVAL 1 WEEK) AND NOW()
GROUP BY o.id_order
HAVING MIN(m.id_message)
LIMIT '.$limit
);
このクエリはこれまでのところ動作します。しかし、メッセージのない注文は見当たりません。
ありがとうございました! Markus
あなたは –
はありがとうそれを削除するので、より良いHAVING' 'のいずれかの比較を行っていません。私はHAVING min(m.id_message)が「最小のmessageidで行を返す」と誤解したと思います。 – mysecondworld
GROUP BY句とHAVING句をスキップし、代わりに 'ORDER BY m.id_message LIMIT 1'を実行します。 – jarlh