2016-11-03 177 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)或空字段,並且如果它們零值,然後不顯示或回顯它們! 下面的代碼可以工作,但因爲我有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

文本如下:您已選擇98作爲22,同時echo也是echo'您已選擇:'。$ dqnt_91.'for'。$ deal_91'。 – ninakind

回答

0

修改數據結構的短,你不會做在SQL比上市的12列好得多每個都有自己的條件;而任何更短的將以清晰的代價來,所以我個人建議反對它。但是,如果簡潔性比您的應用程序的清晰度更重要:

如果您可以添加視圖,它可以提供一個簡單的標誌供您測試。

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,則可以將它們全部連接並檢查結果是否爲空。你可能不得不將空值合併爲''。

但它聽起來像你真的想要的是沒有查詢知道提前知道的一組列;這在SQL中不可行。我想你可以在調用程序中編寫一個函數/方法/過程,根據檢查目錄中的表列來生成查詢。

+0

謝謝,沒有負面的價值,我可以將列設置爲VARCHAR(沒有問題,如果有幫助),或者我也可以將數字替換爲文本,如果它派上用場。基於此,你有什麼建議?你認爲如果......其他方法能派上用場嗎? – ninakind

+0

我不確定你會用'if ... else'做什麼,但是我不能說*不會知道你在想什麼。我的建議......好吧,就像我說的那樣,我建議只列出每個列的單獨條件,因爲在SQL中是邏輯的直接表示。如果你的需求要求做一些不同的事情,那麼你必須評估什麼是最佳的折衷。 –