2014-12-08 4 views
1

Мой выберите:Mysql - Как запросить mysqli_multi_query() возвращает всю строку

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

в моей mysqli_multi_query() не возвращает всю строку, он возвращает только один столбец.

Это мой результат:

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

Но это то, что я хочу:

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

Вот мои две таблицы:

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(); 
?> 

Кто-нибудь знает, что я делаю неправильно?

Заранее благодарен!

+1

Ваш идентификатор пользователя, вероятно, и целочисленный в базе данных, и не обязательно должен быть инкапсулирован кавычками в вашем запросе. Поэтому измените '' 1'' на '1' в запросе =) – RichardBernards

+0

@RichardBernards Получил это, спасибо! – hmzfier

ответ

1

Основываясь на указанном вами выходе, соединение является продолжением.

Смотрите, если это помогает
$query = select u.*, b.book from users u LEFT JOIN booksCheckedOut b ON u.userID = b.userID;

+0

Благодарим вас за ответ. Я бы предпочел сохранить их в двух отдельных запросах и не присоединиться к ним. – hmzfier

0

Я надеюсь, что это будет работать я думаю

select U.userID,U.name,U.date,U.booksRead,BCO.book from user U,booksCheckedOut BCO where U.userID=BCO.userID 
0

попробовать с помощью этого простого запроса:

SELECT u.*, b.book FROM users AS u INNER JOIN booksCheckedOut AS b ON u.userID = b.userID; 
0

Query1: «SELECT * FROM пользователя, где USERID = '1';» возвращает 1 строку с 4 столбцами.

Query2: "SELECT book FROM booksCheckedOut где userID = '1';" возвращает 3 строки с 1 колонкой

Если вы хотели вывести все столбцы из Query1, то вы должны были использовать:

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

Всех три ряда (содержащий только один столбец) из Query2 присваивается итерированным и выводимый с помощью:

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

Так Е() был прерывая выход, но, честно говоря, вы должны использовать LEFT JOIN, потому что вы ссылаетесь две таблицы, используя один и тот же идентификатор. Если вы не знакомы с JOINs, знайте, потому что ваша ситуация требует этого.

Смежные вопросы