-1

假设我有一张如下表:

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

`*header 表示文档名称,而下面的 value 表示术语在文档中出现的频率

我需要选择特定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)

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

4

2 回答 2

0

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

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

$doc_with_term = $result->fetch_assoc();

unset($doc_with_term['term']);

如果您不想使用未设置功能,则必须指定查询中需要的字段,例如

$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() 更容易的方式(!)来说,这似乎需要付出很多努力。

于 2013-11-05T11:12:27.207 回答
0

只需正确设计您的数据库。

看来您需要一个表,其中该行表示为一列:

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

等等。

这样,您将拥有带有简单常规查询的字段。使用好的 mysql 抽象库只需一行代码:

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

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

于 2013-11-05T11:14:57.780 回答