���\¹\���\��\���\��\���\·���¼\���\�������������������
�돫����������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)
������¼��ԏ�¡�¾¾��ď�� ²���������
�������������µ��¡��������ޏ��¼���
�����������������䏢¡�2006-03-17
�����쏢�¹���¹�����������㏢¡�
\���\���\³\��Ώ����ҏ��«������
��������������������¡�����²���̏�����������������������������������»�ߏ��������������·�����ď���������½��Џ��¹��Џ��������»�����������������ď�����������������¹��¡�
������²������\��\���\·���¼\���\������µ������SQL
select count(*) from entry int cnt;
������µ��돪䏪���돢�������������������������¹���̏�¡µ���·������������
select count(*) from entry into cnt;
��������������������»�ߏ��������������¹��¡�
���³���������������������µ��������¡�