使用JOIN运算符从MySQL查询返回数组

时间:2015-05-20 18:34:40

标签: php mysql

我有两张桌子;

图书 ,book_id ,mbook_id(与master_books表中的mbook_id的关系) ,org_id ,book_rating

master_books ,mbook_id ,BOOK_NAME ,book_authors ,book_summary ,book_pub_date ,book_ISBN10 ,book_ISBN13 ,book_image

现在的想法是master_books表中有一系列书籍,但是说有3个图书馆都有同一本书。书籍表只是引用书籍信息的master_books表ID而不是书的3个条目。

首先,我设置了一个简单的查询来获取所有书籍,如此;

$result = mysqli_query($link, "SELECT books.book_id, master_books.book_name, master_books.book_image FROM books JOIN master_books ON master_books.mbook_id WHERE org_id='" . $org_id . "'");

我正在使用以下内容输出数据;

$books = mysqli_fetch_array($result);
foreach($books as $x => $x_value) {
    echo "Key=" . $x . ", Value=" . $x_value;
    echo "<br>";
}

结果如下;

Key=0, Value=1
Key=book_id, Value=1
Key=1, Value=Picturepedia: 15 Plants (Picturepedia)
Key=book_name, Value=Picturepedia: 15 Plants (Picturepedia)
Key=2, Value=9780751350852.jpg
Key=book_image, Value=9780751350852.jpg

我试图弄清楚为什么它与Key = 0重复,然后是Key = book_id等等。以Key = 0,Key = 1,Key = 2开头的行不应该在那里

3 个答案:

答案 0 :(得分:1)

如果您只想获取带有键名的数组而不是数字元素,请使用它:

$books = mysqli_fetch_array($result, MYSQLI_ASSOC);

答案 1 :(得分:0)

这是因为mysqli_fetch_array收到2个参数而你忽略了第二个:resulttype

在文档中,您有3个选项:

  • MYSQLI_ASSOC - 您会在阵列密钥
  • 上收到字段名称
  • MYSQLI_NUM - 您在阵列密钥
  • 上收到一个计数器
  • MYSQLI_BOTH - 您会收到两个选项,都是重复的。 这是默认设置。

正如你所说

  

以Key = 0,Key = 1,Key = 2开头的行不应该在那里

我想你想这样称呼:$books = mysqli_fetch_array($result, MYSQLI_ASSOC);

答案 2 :(得分:0)

回复完全有效。

您存储在$books中的mysqli_fetch_array()返回的数组仅代表结果表中的一行。

您可以使用列名访问结果表的列,例如book_id,或使用SELECT语句中的位置:book_id是您请求的第一个字段,因此索引0,book_name是第二个,因此索引1等等类推。

如果您不想要或不需要带索引的条目,请改用mysqli_fetch_assoc()

要访问下一行,您必须使用循环:

while($books = mysqli_fetch_array($result)) {

    // do stuff

}

只要另一行可用,这将获取另一行。获取完所有内容后,mysqli_fetch_array()将返回NULL,其结果为false,循环将结束。