2012-02-06 54 views
0

我一直在尋找一段時間來選擇SQL中的某些列(字段)。使用PHP過濾SQL查詢

我想要做的是這個...可以說我有一個200列的數據表。我想選擇整行,但只選擇最後197列的數據。留出具有日期和ID的前3列。

輸入我想要的數據的197個字段名稱會非常耗時。必須有一些更簡單的方法來做到這一點。

任何幫助或建議指向正確的方向?

+0

您正在使用的數據庫?如果它是MySQL,我會使用'DESCRIBE'命令。 – 2012-02-06 07:16:08

+0

是的,我正在使用MYSQL。我忘了添加那個珍聞。我對PHP還比較陌生,並試圖理解語言中一些更復雜的部分。恕我直言,這將是有道理的,如果他們包括一個「選擇*除了任何地方xyz」...除了會讓事情變得如此簡單。 – user1191744 2012-02-07 10:36:21

回答

0

如果你正在使用MySQL,嘗試這樣的事情:

<?php 
$query = " 
SHOW COLUMNS FROM `Table` 
WHERE `Field` NOT LIKE 'rowtoignore1' 
AND `Field` NOT LIKE 'rowtoignore2' 
AND `Field` NOT LIKE 'rowtoignore3' 
"; 

$r = mysql_query($query) or die(mysql_error()); 

$queryfields = ""; 

while($f = mysql_fetch_assoc($r)) { 
    $queryfields .= "`{$f['Field']}`,"; 
} 

$queryfields = substr($queryfields,0,strlen($queryfields)-1); 

$query = "SELECT {$queryfields} FROM `Table` WHERE xyz"; 
?> 
+0

這看起來像我想嘗試的。但我想知道如果「WHERE xyz」指向我所過濾的列,會發生什麼?查詢會因錯誤而失敗還是會起作用?基本上,我試圖獲取所有的字段並過濾出前3個ID字段,以便在顯示(循環)結果時它們不是數組的一部分。 – user1191744 2012-02-07 10:32:14

+0

這應該沒有任何問題,但如果他們只是身份證字段,他們不可能在計算上很沉重,你可能想考慮只是忽略你的循環中的這些領域:) – Daan 2012-02-07 18:38:09

+0

這將是另一種方式來做到這一點。我也搜索過濾循環的方法,但沒有看到太多。似乎大多數網站都傾向於重複別人的建議。一段時間之後,它變得非常重複且無法提供信息。關於過濾循環中ID字段的最佳方法的任何建議? ($ f = mysql_fetch_assoc($ r(mysql_error()); ( – user1191744 2012-02-07 20:29:25

0

如果您使用的是MySQL,您可以通過索引查詢模式以獲取列名,以便您可以使用迭代PHP例程來構建查詢,但是在運行一個您需要的語句之前,需要197條選擇語句真的很想。凌亂和低效。

做一個SELECT *似乎更簡單,然後忽略前三列。如果您使用mysql_fetch_assoc(),則可以輕鬆獲得想要的列。看一看:

0

如果我完成這個任務,我將不排除第一3列。如果3列包含冗長的文本/ blob,那麼你可以避免,否則更好地獲取這200列。

使用此功能mysql_list_fields()獲取字段對應一個表,自定義選擇查詢,包括必填字段