[Linux-programlama] Re: Mysql cümleciği yardım - 2 tablo kayıtlarının yan yana litelenmesi

---------

[Linux-programlama] Re: Mysql cümleciği yardım - 2 tablo kayıtlarının yan yana litelenmesi

From: Nesimi ACARCA <nesimia.com_at_gmail.com>
Date: Thu, 21 Aug 2008 14:21:38 +0300
Message-ID: <60bf9c0808210421l2557d5c1qf5f70de6a8e97797@mail.gmail.com>

Umarım işinizi görür.

DELIMITER $$

DROP PROCEDURE IF EXISTS `test`.`sp_zekeriye`$$
CREATE DEFINER=`nsm`@`%` PROCEDURE `sp_zekeriye`()
BEGIN
    DECLARE loop_end INT DEFAULT 0;
    DECLARE loop_endChild INT DEFAULT 0;

    DECLARE _tanim VARCHAR(20);
     DECLARE _tanimlar VARCHAR(2000);
    DECLARE _tutarlar VARCHAR(2000);
    DECLARE _kayitno, _itemno, tmp_kayitno INTEGER;
    DECLARE _deger FLOAT;
    DECLARE curParent CURSOR FOR SELECT kayitno,itemno,deger FROM detail
ORDER BY kayitno;
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET loop_end = 1;

    DROP TABLE IF EXISTS resultset;
    CREATE TABLE resultset (kayitno integer, tanimlar VARCHAR(2000),
tutarlar VARCHAR(2000)) ENGINE = MEMORY;

    SET tmp_kayitno = -1;
      OPEN curParent;
    SET _tanimlar = '';
    SET _tutarlar = '';

     REPEAT

         FETCH curParent INTO _kayitno, _itemno, _deger;

            IF NOT loop_end THEN

            /* Kayit numaralari es ve ilk kayit degilse; Onceki tanimlari
gir, yeni tanimlar icin hazirlan. */
            IF ( (_kayitno <> tmp_kayitno) AND ( tmp_kayitno <> -1 ) ) THEN
                INSERT INTO resultset VALUES(tmp_kayitno,
_tanimlar,_tutarlar);
                SET _tanimlar = '';
                SET _tutarlar = '';
            END IF;

            SELECT tanim INTO _tanim FROM master m WHERE itemno=_itemno;
            SET _tanimlar = CONCAT(_tanimlar, _tanim, '*');
            SET _tutarlar = CONCAT(_tutarlar, CAST(_deger AS CHAR), '*');

            SET tmp_kayitno = _kayitno;

            END IF;

        /* Son kaydi es geçmeyelim. */
        IF loop_end THEN
            INSERT INTO resultset VALUES(tmp_kayitno, _tanimlar,_tutarlar);
        END IF;

      UNTIL loop_end END REPEAT;

      CLOSE curParent;
    SELECT * FROM resultset;
    DROP TABLE resultset;

END$$

DELIMITER ;

*Çıktısı şu şekilde*:

1 - TANIM1*TANIM2* - 100*200 *
2 - TANIM1* - 150*
3 - TANIM3* - 50*

Acil diyince hemen yolladım sondaki fazla * işaretlerini siz sildirizsiniz.

2008/8/20 Zekeriye Bozkurt <zekeriye_at_hotmail.com>

> Selamlar;
>
> Yapıları aşağıdaki şekilde olan 2 tablom var.
>
> Master -> Itemno integer, TANIM varchar(200);
> ----------------------------------------------------------
> 1 - tanım1
> 2 - tanım2
> 3 - tanım3
>
> Detail -> KAYITno integer, ITEMNO integer, Deger FLOAT;
> ---------------------------------------------------------------------
> 1 - 1 - 100
> 1 - 2 - 200
> 2 - 1 - 150
> 3 - 3 - 50
> ..
>
> Bir kayıtno ya ait en fazla 10 adet detay kayıt olabiliyor. Bir kayıtno ya
> ait tanımları yan yana , tutarları yan yana 2 sutün halinde aralarına
> char(XY) koyarak nasil birleşik olarak listeyebilirim veya temporary bir
> table içine alabilirim?
>
> Göstermek istediğim şekil şöyle;
> resultset kayitno integer, TANIMLAR varchar(2000), TUTARLAR VARCHAR(2000);
>
> 1 - TANIM1 * TANIM2 - 100 * 200
> 2 - TANIM1 - 150
> 3 - TANIM3 - 50
>
> Mysql versiyonu 5.1.11 Community
>
> Acilen bu sorunu çözmem gerekiyor.
>
> Zekeriya BOZKURT
>
> PS : Mysql de yeni olduğum için kusura bakmayin, detay verirseniz
> sevinirim.
>
>
>
> ------------------------------
> Aileniz ve arkadaşlarınızla paylaşmak için bir ayda 500'e kadar fotoğraf
> gönderin! Şimdi ücretsiz Windows Live Alanınıza gidin Buraya tıkla!<http://get.live.com/spaces/overview>
>
> _______________________________________________
> Linux-programlama mailing list
> Linux-programlama_at_liste.linux.org.tr
> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>
>

-- 
Nesimi ACARCA
www.nesimia.com

_______________________________________________
Linux-programlama mailing list
Linux-programlama_at_liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama
Received on Thu 21 Aug 2008 - 13:46:26 EEST

---------

Bu arsiv hypermail 2.2.0 tarafindan uretilmistir.