반응형
다른 테이블에 의한 MySQL 사용자 지정 주문
http://sqlfiddle.com/ #!9/d865cf/2/1
스키마:
CREATE TABLE IF NOT EXISTS `letters` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`letter` char(1) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
INSERT INTO `letters` (`id`, `letter`) VALUES
(1, 'd'),
(2, 'f'),
(3, 'a'),
(4, 'e'),
(5, 'c'),
(6, 'b');
CREATE TABLE IF NOT EXISTS `sort` (
`next` int(11) NOT NULL,
`prev` int(11) DEFAULT NULL,
PRIMARY KEY (`next`),
UNIQUE KEY `prev` (`prev`),
CONSTRAINT `fk` FOREIGN KEY (`next`) REFERENCES `letters` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB;
INSERT INTO `sort` (`next`, `prev`) VALUES
(3, NULL),
(4, 1),
(6, 3),
(2, 4),
(1, 5),
(5, 6);
지금 달려가면select letter from letters
주문이 들어옵니다.d,f,a,e,c,b
하지만 알파벳 순서를 받고 싶습니다.a,b,c,d,e,f
의 도움이 없이order by letter
하지만 사용함으로써.sort
표. 에 기재된 내용을 보면,sort
테이블, 와id=3
첫번째 이유는next=3 and prev is null
그다음에 b와id=6
두번째 이유는next=6 and prev=3
, 그다음에 c로id=5
세번째 이유는next=5 and prev=6
,기타.
MySQL의 다른 테이블을 사용하여 사용자 지정 주문을 하려면 어떻게 해야 합니까?
갱신하다
내가 해냈는데 mysql에서 이것을 할 수 있는 유일한 방법일 수도 있습니다.
DELIMITER //
CREATE PROCEDURE `custom_select`()
begin
declare v_next int;
declare v_letter char(1);
declare v_count tinyint;
DROP TEMPORARY TABLE IF EXISTS temp;
CREATE TEMPORARY TABLE temp (id int,letter char(1),idx int AUTO_INCREMENT,PRIMARY KEY (idx));
select id,letter,count(*) into v_next,v_letter,v_count from letters where sort=0;
while v_next is not null do
insert into temp(id,letter)values(v_next,v_letter);
select id,letter,count(*) into v_next,v_letter,v_count from letters where sort=v_next;
end while;
select id,letter from temp order by idx;
end//
DELIMITER ;
CREATE TABLE IF NOT EXISTS `letters` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`letter` char(1) DEFAULT NULL,
`sort` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `sort` (`sort`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;
DELETE FROM `letters`;
INSERT INTO `letters` (`id`, `letter`, `sort`) VALUES
(1, 'd', 5),
(2, 'f', 4),
(3, 'a', 0),
(4, 'e', 1),
(5, 'c', 6),
(6, 'b', 3);
그러면 나는.a,b,c,d,e,f
예상대로:
CALL custom_select
언급URL : https://stackoverflow.com/questions/37639967/mysql-custom-order-by-another-table
반응형
'programing' 카테고리의 다른 글
MariaDB 권한 문제 - [Warning] 사용자 'rphsp'@'raspberrypi.lan'에 대한 액세스가 거부되었습니다. (0) | 2023.09.14 |
---|---|
Oracle - 리터럴이 형식 문자열 오류와 일치하지 않습니다. (0) | 2023.09.14 |
Angular.js - img src 태그의 필터 (0) | 2023.09.14 |
SQL을 사용하여 JSON에서 매치 수를 세고 있습니까? (0) | 2023.09.14 |
오류 2026:tls/ssl 오류:Sslv3 경고 핸드셰이크 실패 (0) | 2023.09.14 |