2017-10-23 1 views
1

보기 나 테이블 또는 임시 테이블을 사용하면 동일한 결과를 얻을 수 있다고 생각했습니다.MySQL에서 다른 결과가 VIEW와 TABLE을 비교할 때 @vars를 사용할 때

CREATE TABLE 또는 CREATE TEMPORARY TABLE과 작동하는 다른 명령문에서 사용할 출력을 만들고 있지만 CREATE VIEW에서는 작동하지 않습니다.

내가 만드는 출력은 3 개의 조인 된 테이블에서 필드를 사용합니다. 흥미로운 부분은 출력에서 ​​IFs@vars을 사용하여 그룹 내에 서수를 추가하는 새로운 필드입니다. 나는 그것이에 추가 된 새로운 서수 열이 같이하고 싶은

display_name date_played end_hcp 
Alan   2017-08-23 720 
Alan   2017-08-29 692 
Alan   2017-09-26 694 
Bill   2017-08-24 865 
Bill   2017-09-02 868 
Bill   2017-09-21 842 
Dave   2017-08-24 363 
Dave   2017-08-31 339 
Dave   2017-09-05 332 
Dave   2017-09-15 348 
Dave   2017-09-17 374 

그리고 여기이있다 : 다음은 순서 필드하여 w/o 출력의 일부 샘플 데이터의 다음

display_name date_played end_hcp Ordinal 
Alan   2017-08-23 720  1 
Alan   2017-08-29 692  2 
Alan   2017-09-26 694  3 
Bill   2017-08-24 865  1 
Bill   2017-09-02 868  2 
Bill   2017-09-21 842  3 
Dave   2017-08-24 363  1 
Dave   2017-08-31 339  2 
Dave   2017-09-05 332  3 
Dave   2017-09-15 348  4 
Dave   2017-09-17 374  5 

사용하여 작업 코드입니다 CREATE TEMPORARY TABLE : 나는 CREATE OR REPLACE VIEW를 사용하는 경우

DROP TEMPORARY TABLE IF EXISTS pre_ordinal; 
CREATE TEMPORARY TABLE pre_ordinal AS 
SELECT u.display_name, 
     m.date_played, 
     p.end_hcp 
FROM `lwljhb_lwl_matches` AS m 
JOIN `lwljhb_lwl_players` AS p 
JOIN `lwljhb_users` AS u 
ON m.id = p.match_id AND 
     p.player_id = u.id 
WHERE league_seasons_id = 12 AND 
     playoff_round = 0 
ORDER BY u.display_name, m.date_played; 

SELECT po.*, 
    @rn := if (@display_name = po.display_name, 
     @rn + 1, 
     if (@display_name := po.display_name, 1, 1) 
     ) as Ordinal 
FROM pre_ordinal AS po 
JOIN (select @rn := 0, @display_name:=null) x 
ORDER BY po.display_name, po.date_played; 

는 서수 열은 거의 모두 1이다. 나는 매우 적은 시간에 각각 Ordinal> 1을 가졌음을 발견했습니다. 이는 매치 테이블의 ID가 연속적이었던 것입니다 (레코드는 물리적 순서대로였습니다).

WordPress 플러그인 내에서 SQL을 사용하여 차트를 만들고 싶습니다. 어떤 이유에서든 플러그인은 다중 명령문에서는 작동하지 않으므로 CREATE TABLE 접근 방식은 작동하지 않지만 CREATE OR REPLACE VIEW은 하나의 명령문 일 뿐이며 잘못된 대답을 얻습니다.

왜 이렇게 될까요?

답변

1

https://dev.mysql.com/doc/refman/5.7/en/create-view.html 부분적으로 말한다 :

주문 BY는 뷰 정의에 허용됩니다,하지만 당신은에 의해 자신의 ORDER가있는 문을 사용하여보기에서 선택하면 무시됩니다.

분명히, 뷰 BY ORDER에 대한 진실은 항상가에 의해 순서를 무시 것을 할 수있다.

쿼리의 순서가 중요하기 때문에 뷰를 사용하는 것이 신뢰할 수 없다고 생각합니다.

+0

2 문 문제를 해결할 방법이 있다고 생각하지 않습니까? –

+0

보기에서 색인을 사용할 수 있습니까? - 신경 쓰지 마라, 전망에 색인 없음. –

+0

WordPress 플러그인을 수정하는 코딩 작업이 필요하다고 생각합니다. –

관련 문제