2017-01-05 7 views
0

У меня есть две таблицы, которые я назову 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 дает мне «разрешение». Как мне сделать так, чтобы в моем результате были все бары, из которых test foo является частью?

SQL Скрипка:http://sqlfiddle.com/#!9/2dfd2/1

+0

См http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me -to-be-a-very-simple-sql-query – Strawberry

+2

'fetch' возвращает только одну строку, помещая ее в цикл while, чтобы получить другие строки. Подробнее см. Http://php.net/manual/en/pdostatement.fetch.php. – dstudeba

+0

@dstudeba Спасибо, что сделал трюк. –

ответ

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 идентификатором, равным "тестом".

0

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

вызов $ stmt-> выборки() еще раз (до $ stmt-> близко()) и $ результат будет «res2»

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

В качестве альтернативы, вы можете сделать

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

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

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

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