2013-05-15 52 views
1

之間比較列值,所以我在這裏創造一個小東西:兩個表

http://sqlfiddle.com/#!2/d7a76/1

它做什麼,我想在那裏,但是當應用到我的實際PHP不起作用。加載時,HTML頁面將顯示所有電纜號碼,它們位於「bundle_lanes」SQL數據庫中的下拉列表中。但是最近我的客戶現在希望電纜數字如果已經存在於數據庫的「電纜類型」中就會消失。所以我需要一些方法告訴SQL查找確切的電纜號匹配,並且如果它們存在於兩個表中,則不顯示它們。我究竟做錯了什麼?它在sqlfiddle中工作。當我運行cableNumbers.php和一個空的下拉框時,沒有錯誤,只是空白的結果。

HTML(的index.php)

<body onload="cable_numbers(); company_name();"> 
<select id="cable_no" onchange="update_section_no();" return false;> 
         <option value="">Cable Number</option> 
        </select> 
</body> 

JAVASCRIPT

//Set Cable Numbers in DropDown 
function cable_numbers() { 
$.ajax({ 
    url: './php/cableNumbers.php', 
    dataType: 'json', 
    success: function(mydata) { 

     var combo = document.getElementById("cable_no"); 

      while (combo.firstChild) { 
       combo.removeChild(combo.firstChild); 
      }; 

      var option = document.createElement("option"); 

      for (var i = 0; i < mydata.length; i++) { 
       option = document.createElement("option"); 
       option.text = mydata[i]['cable_no']; 
       option.value = mydata[i]['cable_no']; 
       try { 
        combo.add(option, null); //Standard 
       } catch (error) { 
        combo.add(option); // IE only 
       } 
      }; 
     section_numbers(); 
    } 
}); 
}; 

PHP cableNumbers.php(其中SQL查詢住)

$sql = "SELECT DISTINCT cable_no FROM bundle_lanes 
     WHERE (cable_no) NOT IN (SELECT cable_no FROM cabletypes) 
     ORDER BY cable_no ASC"; 

$result = mysql_query($sql) or die ('Error'.mysql_error()); 

// If DB query successful then send data to calling routine. 
if (mysql_num_rows($result) >= 1) 
{ 
    while ($row = mysql_fetch_array($result)) { 
     $array[] = $row; 
    }   
    print json_encode($array); 
} 
+0

當你說'它不工作',你的意思是返回的查詢不正確或php顯示不正確的結果嗎?我會先在你的數據庫上運行查詢,然後從那裏開始。 –

+0

它在你的代碼中不起作用?它是否根本不填充組合框?你有錯誤嗎? – Scotch

+0

對不起,它只是返回一個沒有任何值的空白下拉菜單。沒有錯誤,沒有任何內容填充在下拉列表中。 – jflay

回答

1

你可以嘗試這樣的事情

select distinct bundle_lanes.cable_no 
from bundle_lanes left outer join cabletypes on 
    (bundle_lanes.cable_no = cabletypes.cable_no) 
where cabletypes.cable_no is null 
order by bundle_lanes.cable_no 
+0

就是這樣!感謝茄子,但你也回答了它:)謝謝...爲什麼它以這種方式工作,而不是其他方式? – jflay

2

在纜線表中有可能有空值。試試這個版本:

SELECT DISTINCT cable_no FROM bundle_lanes 
     WHERE cable_no NOT IN (SELECT cable_no FROM cabletypes where cable_no is not null) 
     ORDER BY cable_no ASC 
+0

也可以工作,感謝所有不同的選項,最適合用於性能和效果? – jflay

+0

好,所以我現在有另外一件事要添加...我有一個節號,也伴隨着有線電視號碼,所以我一直在努力實現你們在做的事情:SELECT DISTINCT cable_no FROM bundle_lanes WHERE cable_no AND section_no NOT IN(SELECT cable_no AND section_no FROM cabletypes WHERE cable_no IS NOT null) ORDER BY cable_no ASC工作,但它仍然顯示不需要的電纜編號,即使電纜和節號都在兩個表中......但是如果部分號碼不存在,它工作正常,只是希望有沒有選擇,如果兩者都存在。 – jflay

+0

沒關係,我想出使用此:SELECT DISTINCT bundle_lanes.cable_no \t \t FROM bundle_lanes LEFT OUTER JOIN cabletypes \t \t ON bundle_lanes.cable_no = cabletypes.cable_no AND bundle_lanes.section_no = cabletypes.section_no \t \t WHERE cabletypes.cable_no IS NULL \t \t ORDER BY bundle_lanes.cable_no – jflay