���򏩡��䏢����\¹\���\��\���\��\���\·���¼\���\�������������������������(*Ž\��Ï��Ž\)\���

���\¹\���\��\���\��\���\·���¼\���\�������������������
�돫����������SQL������������½������������ҏ��¾����돢���ҏ��������ޏ�����\µ���¼\Ð�����Ï����������򏪤������·��¡񡭏����ď�ԏ�����������½Ð���·���������������Ï�����»��������Џ��������­������������������¡�

���\¹\���\��\���\��\���\·���¼\���\���������»���������\���\���\���\�������������
����\��\��\��������Ï��������������������ҏ����쏢�Ð��������������¡���MySQL������¼��������؏��µ��������������������������¡񏢱��������ӏ��������ޏ�������������������
����\��\��\���\µ���¼\Ð����������²��㏢�̏����돢������¡��������»��������½�������������MySQL�����Ï�����¼���¹��ԏ��µ�����������������������������ď���������

���Ï��Ï����������������������ď��������³���������������·�����������Ï��«��¡�

¾������·����돢����½��Џ�����������\���\���\�̏��¼���������½�����Ï��������¹���̏�¡񏪴��������̏��쏢�Ï��Ï��������¹���ޏ�����\���\���\���\���\���\¹���̏��·���������������������������«�������������������������������³��������������������������»�ߏ����Ï�����������¡�\���\���\���\�����¡�\���\���\���\���\���������¹�����𡯏�������¡�¾���¼���������»������������������������­�����ď��������������¹��������¡�

����¡�����������»�������ď�����������¡�\¹\���\��\���\���\���\���\���\·\���\��я��������������������������������������¹��¡�
��������������������������������������ޏ�������¡򏪴��ӏ������������������­���µ��������¡񏢱���������½Ð���·���������¡돫����������������������������������¹��¡�

��������¡�\¹\���\��\���\��\���\·���¼\���\������������¹��������¡����Џ��������쏢����\������¼\��ď����ҏ�돫�����������»����·���������������­���������¹��¡����������돢����entry\������¼\���\�����������¡�comment\������¼\���\��������ҏ�돫��������������¹��¡���entry has many comments�����¡����·�������

CREATE TABLE entry (
    id int auto_increment primary key,
    title varchar(255),
    body text,
    delete_flag tinyint default 0
);

CREATE TABLE comment (
    id int auto_increment primary key,
    name varchar(255),
    content varchar(255),
    entry_id int not null
);

��������¡񏪩�̏����ӏ�����\������¼\��ď����ҏ����Џ��������������¹��¡��³������»��Џ�������������¡�\������¼\���\���������������ď�����������³�����я������������������������������������������������������¹��¡�

select * from entry;
-------------------------------------
| id | title  | body  | delete_flag |
-------------------------------------
   1 | title1 | body1 |           0 |
   2 | title2 | body2 |           0 |
   3 | title3 | body3 |           0 |
   3 | title4 | body4 |           0 |
-------------------------------------

select * from comment;
------------------------------------
| id | name  | comment  | entry_id |
------------------------------------
|  1 | name1 | content1 |        1 |
|  2 | name2 | content2 |        2 |
|  3 | name3 | content3 |        4 |
|  4 | name4 | content4 |        1 |
|  5 | name5 | content5 |        2 |
|  6 | name6 | content6 |        3 |
|  7 | name7 | content7 |        1 |
------------------------------------

��������������¡�½��������������½Ð�����������ď�����������¡񏪡�����������������������������Ώ��������¹��������¡������á�����Ï���

����1���� \¹\���\��\���\��\���\·���¼\���\����������돫⏢ď�ԏ����ҏ��������¹¾���¹�����¡�

comment\������¼\���\������«������entry_id������»������������·������title������¼������������·�����������Ώ��������¹��¡����������돢����\¹\���\��\���\��\���\·���¼\���\�������������µ������������¹��¡�

delimiter //
CREATE PROCEDURE get_comment_content(IN id INT)
BEGIN
    select content from content where entry_id = id;
END
//

\¹\���\��\���\��\���\·���¼\���\�������������������½Ð���·��������¡�call������»������������������¹��¡�

call get_comment_content(3);
------------
| content  |
------------
| content6 |
------------

call get_comment_content(1);
------------
| content  |
------------
| content1 |
| content4 |
| content7 |
------------

\¹\���\��\���\��\���\·���¼\���\�����������������¡�돫⏢ď�ԏ�����½Ð�������������Џ�ď�ԏ����ҏ��������������­��������������µ��𡯏����������²����������̏���ߏ��̏����������������¹��¡�����������¡񏪱�̏�����IN or OUT �����ҏ�����µ­���¹����������̏���ߏ��̏����������������¹����

CREATE PROCEDURE hoge(IN name INT);
CREATE PROCEDURE fuga(OUT name2 VARCHAR(255));

����2���� \¹\���\��\���\��\���\·���¼\���\������«������½Ð�������̏�������¾���¹�����¡�

entry\������¼\���\���������count������¼������������·�����������Ώ��������¹��¡�

delimiter //
CREATE PROCEDURE count_entry(OUT cnt INT)
BEGIN
    select count(*) from entry int cnt;
END
//

call count_entry(@data);
select @data;
---------
| @data |
---------
|     4 |
---------

����²��я���������������������¡�call���·������\¹\���\��\���\��\���\·���¼\���\��������ҏ�����������½Ð���¹���������­��������¡�@data�����������������Ï��������������ҏ��������·���������������������¹��¡�¼�����������¡�\¹\���\��\���\��\���\·���¼\���\�����������������¡�½Ð���������Џ��������Џ�ď�ԏ��������������·�����������²���������������������������ޏ��������»�����я�¡��³���������Џ�ď�ԏ��������������̏����Џ������������������¹��¡��������������������������������«������������������������������¡돢¡돢¡�

��������������¡��³������2��������������������������\���\���\���\���»������������»���̏��������«���������������»�����я�¡�¡�Ž���Ž������̡��̡���(#Ž��Ρ�\Ž���)=����)�����\)Ž���;'.Ž\���̡��̡���Ž���Ž��!!
���½������»�ߏ����������ď������������������������«��������¡��½�����я���������������������¼��������������ҏ��«�����������������ď��������­�����ď���������

����3���� \¹\���\��\���\��\���\·���¼\���\���¼��������Џ�����¡�

entry_id������������comment������ď�ԏ�����\«\���\���\������·��¡��½������������count\������¼\���\��������������򏪤������·�����������Ώ��������¹��¡�2·����돪�¾���\³\���\���\������µ�����������������������ď�������¡�many_flag������1���������¹��������¡�����������������»���������������¹�����𡯏��������¹��¡�

count\������¼\���\������������³�����я�����������������¡�

CREATE TABLE count (
    id int auto_increment primary key,
    entry_id int not null,
    count int not null,
    many_flag tinyint
);

��������������¡��³������\¹\���\��\���\��\���\·���¼\���\��������ҏ�𡭏�������������������µ���������쏢��\«���¼\½\�����¡ߏ����������������Ï��������������ҏ����̏����Џ��·�����������Ώ��������·�����ď�¡�

delimiter //
CREATE PROCEDURE summary()
BEGIN
    DECLARE done int;
    DECLARE _entry_id int;
    DECLARE _count int;
    DECLARE cur CURSOR FOR
        select entry_id, count(entry_id) as count from comment group by entry_id;
    DECLARE EXIT HANDLER FOR NOT FOUND SET done = 0;

    SET done = 1;
    OPEN cur;
    WHILE done DO
        FETCH cur INTO _entry_id, _count;
        IF _count > 1 THEN
            insert into count values(null, _entry_id, _count, 1);
        ELSE
            insert into count values(null, _entry_id, _count, 0);
        END IF;
    END WHILE;
    CLOSE cur;
END
//

call summary;
select * from count;
-------------------------------------
| id | entry_id | count | many_flag |
-------------------------------------
|  1 |        1 |     3 |         1 |
|  2 |        2 |     2 |         1 |
|  3 |        3 |     1 |         0 |
|  4 |        4 |     1 |         0 |
-------------------------------------

����������������������������������²��ҏ��������¹������������

DECLARE cur CURSOR FOR
    select entry_id, count(entry_id) as count from comment group by entry_id;

�����������돢¡�cur������������������\«���¼\½\������������������Ð���������������������������ҏ�����µ������·���������¹��¡�\«���¼\½\�����������������¡�SQL������»������������·���������¹��¡�

FETCH cur INTO _entry_id, _count;

��������¡��³���������ԏ���̏��������½������\«���¼\½\���������·���²������«��������¡�1¹��ԏ����돢���� _entry_id ������ _count �����������������Ï����Џ�ď�ԏ����������������ҏ����Џ��������������������­���������¹��¡����������Ï��������¹���«���폪���������̏��½�����Ï��������������������������������¹���«����

������������������¾��䏢�·���������������������ď������������������³���������؏��̏��������«��������ߏ�����������»�ߏ��������������¹��¡����������Ï��²������������������¡�¡��¹���������������»������(��¡����­��\����)

[»²¹���]
MySQL \¹\���\��\���\��\���\·���¼\���\���
MySQL5³«�����я����� - \¹\���\��\���\������¼\���\��я���\���\���\�̏�����\¹\���\���������¼«�����²½

�������������������������«��������¡�\¹\���\��\���\��\���\·���¼\���\��������������̏��쏢�쏪��ߏ�������ġ������я��������³������������MySQL�����Ï�������𡭏�������������𡭏�����������������½Ð���������������������ޏ��������¹��������¡�mysql���������������¾��������������ġ����¹������µ����½���̏�������������������¡����������я�����������»����·���������������­���������¹����������

½¾»𡯏 MySQL (DB Magazine SELECTION)���½¾���������»�����𡯏����� MySQL (DB Magazine SELECTION)
������¼��ԏ�¡�¾¾��ď�� ²���������
�������������µ��¡��������ޏ��¼���
�����������������䏢¡�2006-03-17
�����쏢�¹���¹�����������㏢¡�5.0
\���\���\³\��Ώ����ҏ��«������
³\\\\¼ҏ\\\\¼\²