2

次の mysql クエリがあります。

SELECT 
    shop_sections.title, 
    shop_sections.id, 
    shop_sections.parent_id, 
    count(shop_items.id) AS items
FROM 
    shop_sections 
LEFT JOIN 
    shop_items 
ON 
    shop_items.section_id 
        REGEXP "^" + shop_sections.parent_id + "([[.full-stop.]].*|$)" 
GROUP BY 
    shop_sections.id

REGEXP が正しく実行されません。行shop_items.section_id= 1 の場合shop_items.section_id、「1」で始まるフィールドを持つすべての行を取得します (つまり、13.14 または 13.15 ですが、1 または 1.* (1.1、1.2、1.2.3 など) のいずれかを取得する必要があります)。

私は気づいた

REGEXP "^" + shop_sections.parent_id + "([[.full-stop.]].*|$)"

REGEXP "^1([[.full-stop.]].*|$)"

1 に対して適切に機能するよりも (また、手動でクエリに挿入する場合は任意の値に対しても)。しかし、1 つのクエリを使用してすべてのアイテムを取得したいと考えています。

何が問題なのですか?

アップデート。

shop_items.section_id次の形式の値が含まれています:parent_section.child_section_1.child_section_2.child_section_3など。アイテムのページのページネーションにこれが必要です。

の値shop_sections.parent_idは同じ形式です。

私がやりたいのは、セクションのツリーと各セクションのアイテム数を表示することだけです。

4

1 に答える 1

2

+MySQL の連結には使用できません。テストは次のようになります。

ON 
  shop_items.section_id 
    REGEXP CONCAT('^', shop_sections.parent_id, '([[.full-stop.]].*|$)')

あなたが得る奇妙な結果は、代わりに加算を実行する壊れた連結によるものです。shop_sections.parent_idを 1 とすると、次のようになります。

'^' + shop_sections.parent_id + '([[.full-stop.]].*|$)'

... は実際に評価さ0 + 1 + 0れます (整数としてキャストされた文字列は、一連の数字で始まらない限り 0 として評価されます)。これを正規表現として使用すると、役に立たない と同等になり'1'ます。

于 2012-08-24T10:11:24.053 に答える