从n列获取fetch_array的有效方法

时间:2013-11-05 10:50:21

标签: php multidimensional-array mysqli

说我有一张表如下:

+---------+------+------+---+-----+---+
| term    | 1    | 2    | 3 | ... | n |
+---------+------+------+---+-----+---+
| connect | 7    | 14   | 2 | ... | 8 |
| finish  | 1    | NULL | 9 | ... | 1 |
| ...     | ...  | ...  | . | ... | . |
| net     | NULL | 6    | 1 | ... | 5 |
+---------+------+------+---+-----+---+

`*标题表示文档名称,而下面的值表示文档中出现的术语的频率

我需要选择特定term值的行。目前我使用:

$result = $mysqli->query("SELECT * FROM `term_doc` WHERE `term`='$term'");

while ($row = $result->fetch_array()){

    $result_[] = $row;

}

从上面的脚本我得到:

Array ([0]=>Array([0]=>connect*
                  [term]=>connect*
                  [1]=>7
                  [2]=>14
                  [3]=>3
                  ...
                  [n]=>8)...)

带星号的元素是不受欢迎的。要获得干净的数组,我需要应用以下脚本

$doc_with_term = $result_[0];

unset($doc_with_term[0]);

unset($doc_with_term['term']);

所以我得到以下数组:

Array([1]=>7
      [2]=>14
      [3]=>3
      ...
      [n]=>8)

我想知道是否有一些优雅的方法来获取查询结果而没有最后一个脚本来获取干净的数组

2 个答案:

答案 0 :(得分:0)

您希望您的数组不包含字段“term”吗?最简单的方法:

$result = $mysqli->query("SELECT * FROM FROM `term_doc` WHERE `term`='$term'");

$doc_with_term = $result->fetch_assoc();

unset($doc_with_term['term']);

如果您不想使用unset-function,则必须在查询中指定所需的字段,例如

$result = $mysqli->query("SELECT `1`,`2`,`3` FROM FROM `term_doc` WHERE `term`='$term'");

$doc_with_term = $result->fetch_assoc();

修改

我仍然不明白为什么你想要这个。无法从结果中排除字段,只能包含它们。

您可以使用

SHOW CREATE TABLE

获取你的字段列表并在之后的SELECT中使用它们,但这对于使用unset()更容易(!)的东西似乎需要付出很多努力。

答案 1 :(得分:0)

正确设计数据库。

似乎你需要一个表格,其中这一行表示为一列:

term_id | value
      1 |     7
      1 |    14
      1 |     2
      2 |     1
      2 |     9

等等。

通过这种方式,您可以使用简单的常规查询来填充字段。使用good mysql abstraction library只需一行代码:

$sql    = "SELECT value FROM terms, term_doc WHERE term=?s AND term_id=id";
$result = $db->getCol($sql, $term);

请注意使您的查询安全的占位符用法