1

記事と株式情報を含むデータベースがあります (2 つのテーブル)。記事 ID を入力するときは、記事テーブルから記事を選択し、他の操作を行ってから、記事が利用可能かどうか在庫テーブルを調べます。

これは簡単なことかもしれませんが、SELECT * FROM articles私のarticlesテーブルにはフィールドがありますparent_id。それが設定されている場合は、親行を選択する必要があります。説明しましょう:

+----+-----------+---------+---------+
| id | parent_id | article | country |
|----|-----------|---------|---------+
|  1 |           | abc     | uk      |
|  2 |           | cde     | us      |
|  3 |           | efg     | can     |
|  4 | 6         | hij     | mex     |
|  5 |           | klm     | bra     |
|  6 |           | nop     | us      |
|  7 | 8         | qrs     | mex     |
|  8 |           | tuv     | uk      |
+----+-----------+---------+---------+

article を検索するabcと、国 UK の行 1 が返されます。を検索している場合hij、クエリは国 mex を含む行 4 ではなく国 US を含む行 6 を返す必要があります。MySQLでこれを行う方法はありますか、それともPHPで2つのクエリに分割するより高速/より良い/唯一の方法ですか?

4

4 に答える 4

1

mysql IF Conditionals Mysql docsを使用して実行できます

ただし、デバッグが困難な邪悪な SQL ステートメントですぐに終わる可能性があります。複数のクエリと php の if を使用すると、おそらく解決が速く/簡単になります。

ビューまたはストアド プロシージャを記述してそれを実現するという代替オプションがありますが、これもまた利点に疑問があります。

于 2013-01-25T10:34:15.883 に答える
1

LEFT外部結合でそれを行うことができます:

SELECT 
    COALESCE(p.id, a.id) AS id
  , COALESCE(p.country, a.country) AS country 
FROM 
        articles AS a
    LEFT JOIN 
        articles AS p
            ON p.id = a.parent_id 
WHERE
    a.article LIKE '%hij%' ;          -- or:  a.article = 'hij'
于 2013-01-25T10:37:24.440 に答える
0

LEFT JOIN SELECT a2.id, a2.country FROM 記事 a1 LEFT JOIN 記事 a2 ON (a2.id = a1.parent_id) WHERE a1.article = 'hij'; を使用できます。

于 2013-01-25T10:40:37.397 に答える
0

関数の場合、MySQL を使用できます。IFNULL が目的の関数だと思います。

IFNULL(parent_id, id)
于 2013-01-25T10:33:23.423 に答える