2016-11-03 3 views
-1

아래 코드에 12 개의 열이 있습니다. 사용자 주문 (행) 필드를 선택하는 최선의 올바른 올바른 방법을 원합니다 테이블/0 비어 있지 않습니다. (모든 필드 INT이며, 숫자는 500 미만이다)가있는 경우MYSQL은 테이블 행에서 공백이 아닌 여러 개의 필드/열을 선택합니다.

$conn = mysqli_connect("localhost", "root", "","table_name") or die("error"); 
       $sql = "SELECT dqnt_91,deal_91,dqnt_92,deal_92,dqnt_93,deal_93,dqnt_94,deal_94,dqnt_95,deal_95,dqnt_96,deal_96 FROM table_name WHERE fid='$userid' AND COLUMNS ARE NOT EMPTY "; 

       $result = mysqli_query($conn, $sql); 
        while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) { 
       $d_91 = $row['deal_91']; $d_92 = $row['deal_92']; $d_93 = $row['deal_93']; $d_94 = $row['deal_94']; $d_95 = $row['deal_95']; $d_96 = $row['deal_96']; 
       $qnt_91 = $row['dqnt_91']; $qnt_91 = $row['dqnt_92']; $qnt_91 = $row['dqnt_93']; $qnt_91 = $row['dqnt_94']; $qnt_91 = $row['dqnt_95']; $qnt_91 = $row['dqnt_96']; } 
    echo 'You have selected:'.$d_91.'for'.$deal_91.'<br>'; 
    echo 'You have selected:'.$d_92.'for'.$deal_92.'<br>'; 

echo 'You have selected:'.$d_96.'for'.$deal_96.'<br>'; 

가 다시, 나는이 제로 (0) 또는 비어 있지 만 필드를 에코 원하고 0 값을 표시하거나 나타내지 않습니다! 아래의 코드는 작동하지만 12 개의 열이 있고 더 많은 코드를 추가 할 수 있기 때문에 아래 코드는 유용하지 않습니다.

SELECT [ all 12 x columns_name] FROM table_name WHERE table_name.column_name1!='' AND table_name.column_mame2!='' AND x another 10 times the last code ; 

덕분에 데이터 구조를 수정

+0

어떤 입력에 따라 출력이 달라질 수 있습니까? – Drew

+0

text like : 당신은 22를 위해 98을 선택했고, echo는 '당신이 선택했습니다 :'. $ dqnt_91.'for '$ deal_91.' – ninakind

답변

0

짧은, 당신은 12 열을 나열하는 것보다 SQL 훨씬 더 잘 할 수 없습니다 자신의 상태와 각; 그리고 무엇이든 짧아지면 선명도가 떨어질 것이므로 개인적으로 반대 할 것입니다. 그러나 간결함이 응용 프로그램의 명확성보다 더 중요한 경우 :

보기를 추가 할 수 있으면 간단한 플래그로 테스트 할 수 있습니다.

create view my_view as (select -- each column 
          , case when -- all values are present 
            then 1 else 0 end nonempty_flg 
          from -- ...) 

적어도 복잡성은 호출하는 응용 프로그램에서 숨겨집니다. 그 옵션이 아닌 경우 :

열은 작은 정수 값입니다. 추가로 음수가 아닌 것으로 가정 할 수 있다면,이를 합계하여 0과 비교할 수 있습니다. 음수 일 수있는 경우 절대 값을 더할 수 있습니다.

예제에서 열은 문자열로 처리됩니다. 실제로 CHAR 또는 VARCHAR이면 모두 연결하여 결과를 비어있을 수 있습니다. 너가 갈 때 null 값을 ''로 합쳐야 할 수도있다.

하지만 실제로는 처럼 들리는데 원하는 것은 사전에 열 집합을 알고있는 쿼리없이 작동합니다. 그건 SQL에서 불가능합니다. 카탈로그의 테이블 열을 검사하여 쿼리를 생성하는 함수/메서드/프로 시저를 호출 프로그램에 작성할 수 있다고 가정합니다.

+0

감사합니다. 음수 값이 없습니다. 열을 VARCHAR로 설정할 수 있습니다. 도움이된다면 아무런 문제가 없습니다. 또는 숫자를 텍스트로 바꾸면 편리합니다. 그걸 바탕으로, 당신은 무엇을 제안하고 당신은 if ... else가 유용 할 수 있다고 생각합니까? – ninakind

+0

나는 당신이'다른 것 '으로 무엇을 할 지 확신하지 못한다.하지만 당신이 염두에두고있는 것을 모른 채 도움이되지 않을 것이라고 나는 말할 수 없다. 내가 제안한 바는 ... 글쎄, 내가 말했듯이, 각 열에 대해 별도의 조건을 나열하는 것이 좋습니다. 왜냐하면 SQL은 논리를 직접 표현하기 때문입니다. 당신의 요구가 다른 무엇인가를 요구한다면, 당신은 트레이드 오프가 최상인지 평가해야 할 것입니다. –

관련 문제