我一直在尋找一段時間來選擇SQL中的某些列(字段)。使用PHP過濾SQL查詢
我想要做的是這個...可以說我有一個200列的數據表。我想選擇整行,但只選擇最後197列的數據。留出具有日期和ID的前3列。
輸入我想要的數據的197個字段名稱會非常耗時。必須有一些更簡單的方法來做到這一點。
任何幫助或建議指向正確的方向?
我一直在尋找一段時間來選擇SQL中的某些列(字段)。使用PHP過濾SQL查詢
我想要做的是這個...可以說我有一個200列的數據表。我想選擇整行,但只選擇最後197列的數據。留出具有日期和ID的前3列。
輸入我想要的數據的197個字段名稱會非常耗時。必須有一些更簡單的方法來做到這一點。
任何幫助或建議指向正確的方向?
如果你正在使用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";
?>
這看起來像我想嘗試的。但我想知道如果「WHERE xyz」指向我所過濾的列,會發生什麼?查詢會因錯誤而失敗還是會起作用?基本上,我試圖獲取所有的字段並過濾出前3個ID字段,以便在顯示(循環)結果時它們不是數組的一部分。 – user1191744 2012-02-07 10:32:14
這應該沒有任何問題,但如果他們只是身份證字段,他們不可能在計算上很沉重,你可能想考慮只是忽略你的循環中的這些領域:) – Daan 2012-02-07 18:38:09
這將是另一種方式來做到這一點。我也搜索過濾循環的方法,但沒有看到太多。似乎大多數網站都傾向於重複別人的建議。一段時間之後,它變得非常重複且無法提供信息。關於過濾循環中ID字段的最佳方法的任何建議? ($ f = mysql_fetch_assoc($ r(mysql_error()); ( – user1191744 2012-02-07 20:29:25
如果您使用的是MySQL,您可以通過索引查詢模式以獲取列名,以便您可以使用迭代PHP例程來構建查詢,但是在運行一個您需要的語句之前,需要197條選擇語句真的很想。凌亂和低效。
做一個SELECT *
似乎更簡單,然後忽略前三列。如果您使用mysql_fetch_assoc()
,則可以輕鬆獲得想要的列。看一看:
如果我完成這個任務,我將不排除第一3列。如果3列包含冗長的文本/ blob,那麼你可以避免,否則更好地獲取這200列。
使用此功能mysql_list_fields()獲取字段對應一個表,自定義選擇查詢,包括必填字段
您正在使用的數據庫?如果它是MySQL,我會使用'DESCRIBE'命令。 – 2012-02-06 07:16:08
是的,我正在使用MYSQL。我忘了添加那個珍聞。我對PHP還比較陌生,並試圖理解語言中一些更復雜的部分。恕我直言,這將是有道理的,如果他們包括一個「選擇*除了任何地方xyz」...除了會讓事情變得如此簡單。 – user1191744 2012-02-07 10:36:21