Как выбрать несколько пар ключ / значение, где ключ является постоянным?

У меня есть две таблицы, которые я назову foo а также bar, Каждая таблица имеет первичный ключ, foo_id а также bar_idсоответственно. Каждый ряд в foo может быть частью группы, которая является строкой в 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 Фу является частью?

SQL Fiddle: http://sqlfiddle.com/#!9/2dfd2/1

0

Решение

ты можешь использовать 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, равным «test».

0

Другие решения

Вы связываете параметры для каждого вызова $ stmt-fetch ();

вызовите $ stmt-> fetch () снова (до $ stmt-> close ()) и $ result будет «res2»

Вы можете сделать это в цикле и поместить все $ result в массив.

Кроме того, вы можете сделать

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

В этом случае $ строки будут все строки результата запроса в виде ассоциативных массивов. Затем вы можете сопоставить это с массивом

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

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

По вопросам рекламы [email protected]