У меня есть две таблицы, которые я назову 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
ты можешь использовать 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».
Вы связываете параметры для каждого вызова $ 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);