Kueri SQL untuk memilih anak dan orang tua

Saya memiliki tabel mysql 'taxonomy_term_hierarchy' dengan 2 bidang.

tid -- Kunci Utama: taxonomy_term_data.tid dari istilah tersebut.
induk -- Kunci Utama: taxonomy_term_data.tid dari induk istilah tersebut. 0 menunjukkan tidak ada orang tua.

Saya perlu mendapatkan istilah anak tingkat 1 untuk beberapa istilah, tetapi jika tidak memiliki anak, maka dapatkan anak untuk orang tuanya. Sesuatu seperti:

SELECT down.tid FROM taxonomy_term_hierarchy down WHERE down.parent=60
IF ( COUNT(down.tid) = 0 ) THEN
   SELECT current.tid FROM taxonomy_term_hierarchy current 
   WHERE current.parent=
        (SELECT its.parent FROM taxonomy_term_hierarchy its
         WHERE its.tid=60)

Bisakah saya melakukannya dalam satu permintaan?


person user1809655    schedule 02.03.2014    source sumber


Jawaban (1)


Sayangnya menurut saya hal ini tidak mungkin dilakukan dengan satu kueri karena Anda memerlukan pernyataan IF untuk menentukan kueri mana yang akan digunakan. Namun, Anda dapat membuat prosedur tersimpan untuk menangani logika tersebut, dan memanggilnya dengan meneruskan tid ke dalamnya. Berikut adalah prosedur tersimpan yang saya buat:

CREATE PROCEDURE getChildren(in _tid int)
BEGIN

  DECLARE hasChildren BIT;

  SET hasChildren = EXISTS (
    SELECT ''
    FROM taxonomy_term_hierarchy tth
    WHERE tth.parent = _tid
  );

  IF hasChildren THEN
    BEGIN
      SELECT tid, parent
      FROM taxonomy_term_hierarchy
      WHERE parent = _tid;
    END;
  ELSE
    BEGIN
      SELECT tth3.tid, tth3.parent
      FROM taxonomy_term_hierarchy tth1
        INNER JOIN taxonomy_term_hierarchy tth2 ON tth1.parent = tth2.tid
        INNER JOIN taxonomy_term_hierarchy tth3 ON tth2.tid = tth3.parent
      WHERE tth1.tid = _tid;
    END;
  END IF;

END//

Saya membuat skema di fiddle sql ini sehingga Anda dapat mengujinya sendiri.

person jtate    schedule 03.03.2014
comment
Besar! Ini sangat membantu. - person user1809655; 03.03.2014