2012-11-15 2 views
1

안녕하세요, 저는 mysql 쿼리에 빠른 문제가 있습니다.체크 박스 배열 데이터로 mysql 정렬하기

저는 선택을하려는 중이며 그것이 완료 될지 확신하지 못합니다.

나는 ListeningMethod라는 필드가있는 테이블을 가지고 있는데,이 필드에는 html 체크 상자에 삽입 된 쉼표로 구분 된 값이 들어있다. 가능한 항목이 5 개 있으며 필드의 확인란에 값이 모두 포함되거나 아무 것도 포함 할 수 없습니다.

NOLISTEN,RADIO,INTERNET,SATELLITE,MOBILE 

는 내가 뭘하려는 것은 일종의 데이터이지만, 계산에 의해 수행

샘플 데이터는 다음과 유사합니다. 따라서 "라디오"10 회, "모바일"5 회, "위성"3 회 10 회 이상의 레코드가있는 경우 100 개의 레코드를 검색하면 해당 결과를 표시하고 정렬 할 수 있어야하며 "주문 by "는 가장 일반적인 청취 방법으로 설정되었습니다.

나는 그것을 시도했지만 너무 잘 가지 않았다.

의견이 있으십니까? 감사합니다. .

SELECT 
ListeningMethod, 
ListeningMethod REGEXP ("NOLISTEN") as ViewNOLISTEN, 
ListeningMethod REGEXP ("RADIO") as ViewRADIO, 
ListeningMethod REGEXP ("INTERNET") as ViewINTERNET, 
ListeningMethod REGEXP ("SATELLITE") as ViewSATELLITE, 
ListeningMethod REGEXP ("MOBILE") as ViewMOBILE 
FROM VAT 

나는 그런 "COUNT (ViewRadio) CountRadio"로, 더 추가했는데,이 열이 존재하지 않는다고 말한다, 그래서 나는 약간의 손실입니다.

예 삽입 문 : 주석에 Barmar에 의해 제안

INSERT INTO `VAT` (`ListeningMethod`) VALUES ('NOLISTEN,RADIO,INTERNET,MOBILE'); 
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('RADIO'); 
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('RADIO'); 
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('RADIO'); 
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('RADIO'); 
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('RADIO'); 
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('INTERNET'); 
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('RADIO'); 
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('RADIO'); 
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('NOLISTEN'); 
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('INTERNET'); 
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('RADIO'); 
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('INTERNET'); 
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('RADIO'); 
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('RADIO'); 
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('RADIO'); 
INSERT INTO `VAT` (`ListeningMethod`) VALUES ('MOBILE'); 
> 
+1

대신 그보다 더 낫다 아니다 Listmethod를 청취 방법에 따라 1,2,3,4,5로 삽입하여 쉽게 순서를 사용하여 가장 높은 청취 방법을 얻을 수 있습니다. –

+1

다음과 같이 별도의 테이블을 사용하는 것이 훨씬 쉽습니다. 쉼표로 구분 된 목록. – Barmar

+0

안녕하세요 @ 바르 마, 그렇습니다 이상적인 세상 예.하지만이 작업이 매우 빨리 실행되어야하고 시간이 없었습니다. 다시 한번 감사드립니다. –

답변

1

당신은 분리 된 테이블을 사용할 수, (명사에 붙여서의 뜻을 나타냄) 아래에 주어진 현명한 당신이 사용 노조와 같은 임시 테이블을 만들 수있는 다른 : (당신이 조합하위 쿼리 아무 문제가없는 경우) : 쉼표로 분리 된 값을 삽입

SELECT * FROM 
(
    SELECT "NOLISTEN" AS "ListeningMethod", COUNT(ListeningMethod) as "AMOUNT" FROM VAT WHERE ListeningMethod LIKE "%NOLISTEN%" 
    UNION 
    SELECT "Radio" AS "ListeningMethod", COUNT(ListeningMethod) as "AMOUNT" FROM VAT WHERE ListeningMethod LIKE "%RADIO%" 
    UNION 
    SELECT "INTERNET" AS "ListeningMethod", COUNT(ListeningMethod) as "AMOUNT" FROM VAT WHERE ListeningMethod LIKE "%INTERNET%" 
    UNION 
    SELECT "SATELLITE" AS "ListeningMethod", COUNT(ListeningMethod) as "AMOUNT" FROM VAT WHERE ListeningMethod LIKE "%SATELLITE%" 
    UNION 
    SELECT "MOBILE" AS "ListeningMethod", COUNT(ListeningMethod) as "AMOUNT" FROM VAT WHERE ListeningMethod LIKE "%MOBILE%" 
) AS VAT2 ORDER BY AMOUNT DESC; 
+0

고마워요, 고마워요 고마워요. 그 트릭을 했어! 나는 내가 테이블을 들여다 볼 수 있었지만 정말로 빨리 풀어야 할 것이 필요하다는 것을 압니다. 모두에게 빠른 반응을 보내 주시면 감사하겠습니다. –