2012-02-06 53 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()获取字段对应一个表,自定义选择查询,包括必填字段