【问题标题】:How to SELECT multiple key/value pairs where the key is constant?如何选择键不变的多个键/值对?
【发布时间】:2017-05-20 14:15:29
【问题描述】:

我有两张桌子,我将分别命名为 foobar。每个表都有一个主键,分别是foo_idbar_idfoo 中的每一行都可以是一个组的一部分,这是bar 中的一行 - 考虑一个委员会的成员,每个成员可以在多个委员会中,每个委员会可以有多个成员。我有一个可以称为foo_bar 的连接表,它只有两列(其他两个表的主键各一列)并列出了哪个 foo 是哪个栏的一部分:

| foo_id | bar_id |
| ------ | ------ |
|   test |    res |
|   test |   res2 |
| --------------- |

这是我的 PHP(由于我的虚拟主机,我无法使用 $stmt->get_result()):

$stmt = $db->prepare("SELECT bar_id FROM foo_bar WHERE foo_id = ?");

$stmt->bind_param("s", "test");
$stmt->execute();
$stmt->bind_result($result);
$stmt->fetch();
$stmt->close();

现在,打印 $result 会给我“res”。如何使我的结果是 test foo 所属的所有条?

SQL 小提琴: http://sqlfiddle.com/#!9/2dfd2/1

【问题讨论】:

标签: php mysql sql mysqli querying


【解决方案1】:

您正在为 $stmt-fetch() 的每次调用绑定参数;

再次调用 $stmt->fetch()(在 $stmt->close() 之前)并且 $result 将是 "res2"

您可以在循环中执行此操作并将所有 $result 放入一个数组中。

或者,你可以这样做

$result = $stmt->get_result();
$rows = $result->fetch_all(MYSQLI_ASSOC); 

$rows 然后将查询的所有结果行作为关联数组。然后你可以将它映射到一个数组

function getBarID($row) {
  return $row["bar_id"];
}

$bar_ids = array_map("getBarID",$rows);

【讨论】:

    【解决方案2】:

    你可以使用mysqli 类似这样的东西:

    $mysqli = new MySQLi(SERVER, USERNAME, PASSWORD, DATABASE);  
    
    $query = $mysqli->query("SELECT bar_id FROM foo_bar WHERE foo_id = 'test'");
    
      while ($row = $query->fetch_assoc()) {
                    $results[] = $row;
                }
    

    $results 将拥有所有 foo id 等于“test”的酒吧 id。

    【讨论】:

      猜你喜欢
      • 2017-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-27
      • 2018-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多