1

私の選択:

$query  = "SELECT * FROM user where userID='1';";

私の mysqli_multi_query() 内では、行全体が返されず、単一の列のみが返されます。

これは私の結果です:

1-----------------book1 book3 book4

しかし、これは私が欲しいものです:

1 John Jan-26 4-----------------book1 book3 book4

ここに私の2つのテーブルがあります:

Table1: user

|    userID   |     name        |   date       |   booksRead
---------------------------------------------------------------------
|    1        |     John        |   Jan-26     |   4
|    2        |     Andy        |   Jan-27     |   7
|    3        |     Mark        |   Jan-28     |   8

Table 2: booksCheckedOut

row    |   userID   |      book    |  date
-------------------------------------------------
1      |    1       |      book1   |  Jan-26
2      |    2       |      book2   |  Jan-27
3      |    1       |      book3   |  Jan-28
4      |    1       |      book4   |  Jan-29

これが私のphpコードです:

<?php
$mysqli = new mysqli("localhost","root","password","database_name");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$query  = "SELECT * FROM user where userID='1';";
$query .= "SELECT book FROM booksCheckedOut where userID='1';";


if ($mysqli->multi_query($query)) {    // execute multi query
    do {
        if ($result = $mysqli->store_result()) {     // store first result
            while ($row = $result->fetch_row()) {
                printf("%s\n", $row[0]);
            }
            //$result->close();
        }

        if ($mysqli->more_results()) {    /* print divider */
            printf("-----------------\n");
        }
    } while ($mysqli->next_result());
}

$mysqli->close();
?>

私が間違っていることを誰かが知っていますか?

前もって感謝します!

4

4 に答える 4

1

指定した出力に基づいて、結合を続行する方法です。

これが役立つかどうかを確認してください
$query = select u.*, b.book from users u LEFT JOIN booksCheckedOut b ON u.userID = b.userID;

于 2014-12-08T08:24:34.800 に答える
0

Query1: "SELECT * FROM user where userID='1';" 4 列の 1 行を返します。

Query2: "SELECT book FROM booksCheckedOut where userID='1';" 1 列で 3 行を返します

Query1 からすべての列を出力したい場合は、次を使用する必要があります。

printf("%s %s %s %s", $row[0]);

Query2 からの 3 行すべて (1 列のみを含む) が割り当てられ、以下を使用して反復され、出力されます。

printf("%s", $row[0]);

したがって、printf() は出力を中断していましたが、正直なところ、同じ ID を使用して 2 つのテーブルを参照しているため、LEFT JOIN を使用する必要があります。JOIN に慣れていない場合は、状況によって必要になるため、慣れてください。

于 2016-11-15T13:59:09.443 に答える
0

これがうまくいくことを願っています

select U.userID,U.name,U.date,U.booksRead,BCO.book from user U,booksCheckedOut BCO where U.userID=BCO.userID  
于 2014-12-08T11:24:02.480 に答える
0

この簡単なクエリを試してください:

SELECT u.*, b.book FROM users AS u INNER JOIN booksCheckedOut  AS b ON u.userID = b.userID;
于 2014-12-08T11:30:38.377 に答える