从SQL数据库中选择包含特定列中某个文本字符串的所有行

时间:2013-06-29 21:54:53

标签: php sql select contains sql-like

我一直在查看thisthis等其他帖子,但对我的具体案例没有任何效果。

我有一张这样的表:

|    Name    |    Reference    |    Etc...    |
|------------|-----------------|--------------|
|  John Doe  |                 |  Blah blah   |
|  Jane Doe  |   John Doe      |  Blah blah   |
| Mike Small |   Jane Doe      |  Blah blah   |
|  Steve Ex  |   John Doe      |  Blah blah   |
| Mary White |   Mike Small    |  Blah blah   |

我希望能够找到哪些名称也是其他名称的引用,并将它们转换为链接,以便用户可以单击它们并获取这个名称的列表。

例如,如果用户点击John Doe,他/她将获得如下表格:

|    Name    |    Reference    |    Etc...    |
|------------|-----------------|--------------|
|  Jane Doe  |   John Doe      |  Blah blah   |
|  Steve Ex  |   John Doe      |  Blah blah   |

目前我被困在这里:

function find_items_by_ref($ref) {
  db_connect();
  $query = sprintf("SELECT * FROM items WHERE reference LIKE '%s'", mysql_real_escape_string($ref));
  $result = mysql_query($query);
  $row = mysql_fetch_array($result);
  return $row;
}

我已尝试过LIKECONTAINS以及like '%' || TEXT || '%'等等,但没有任何效果。有什么想法吗?


我正在尝试下面给出的答案中的两种可能性。第一个我遇到了麻烦。当我想要echo从SQL中获取的数组元素时,我得到一个警告:非法字符串偏移'X' ...错误。如果我在其中一个检索到的数组上运行var_dump,这就是我得到的。我不太清楚什么是错的。对我来说似乎是一个工作阵列:

array (size=16)
0 => string '37' (length=2)
'id' => string '37' (length=2)
1 => string 'Steve Ex' (length=8)
'name' => string 'Steve Ex' (length=8)
2 => string 'John Doe' (length=8)
'reference' => string 'John Doe' (length=8)
3 => string 'Blah blah' (length=9)
'etc' => string 'Blah blah' (length=9)

行。解决了它。问题是如此愚蠢......猜猜谁是一个真正的屁股。 无论如何,事情是我试图传递一个数字,如果SQL行作为一行。我错误地复制了我在用户想要通过其ID获取单行信息时使用的Select函数。问题一直存在,我就像一只躲在树后面的大象一样错过了它。无论如何,那是...对不起。工作代码是:

function find_items_by_ref($ref) {
  db_connect();
  $query = sprintf("SELECT * FROM items WHERE INSTR(reference,'".mysql_real_escape_string($ref)."')>'0' ORDER BY name ASC");
  $result = mysql_query($query);
  $result = db_result_to_array($result);
  return $result;
}

感谢@dimaninc的帮助!

1 个答案:

答案 0 :(得分:5)

function find_items_by_ref($ref) {
  db_connect();
  $query = "SELECT * FROM items WHERE INSTR(reference,'".mysql_real_escape_string($ref)."')>'0'";
  $result = mysql_query($query);
  $row = mysql_fetch_array($result);
  return $row;
}

在这种情况下,INSTR比LIKE快

或者如果你需要LIKE,你应该正确使用它:

$query = "SELECT * FROM items WHERE reference LIKE '%".mysql_real_escape_string($ref)."%'";