название немного расплывчато в том, что я хочу сделать, поэтому я объясню здесь. У меня есть две таблицы, из которых я получаю информацию: таблица книг и таблица инвентаризации. Я получаю Название книги, Имя автора и ISBN из таблицы Книги, и я объединяю Количество и Расположение Библиотеки из Инвентаря в одну. Я хочу, чтобы информация выглядела как
Title of Book
By Author1 Name and Author2 Name
ISBN: 740-fojsd99
(0) Copies available at Location2
(3) Copies available at Location5
когда я получаю эхо информацию в php, он получает только первую строку таблицы инвентаризации, и эхо это нравится
22 11 63
By Stephen King
ISBN: 9788401344106
(0) Copies at the location of Sylvania Public Library
Должно выглядеть
22 11 63
By Stephen King
ISBN: 9788401344106
(0) Copies at the location of Sylvania Public Library
(2) Copies at the location of Toledo Public Library
(1) Copies at the location of Carson Library
Я пытался разобрать, использовать foreach и использовать два отдельных запроса, чтобы получить то, что я хотел показать, но я немного новичок в PHP и все еще изучаю, как он работает.
Мой PHP-код выглядит следующим образом
$sql = "SELECT Book.Book_Title,
Book.Author_Name,
Book.Book_ISBN
FROM Book
GROUP BY Book_Title";$result = mysqli_query($conn,$sql);while($row = mysqli_fetch_assoc($result))
{
//var_dump($row);
//had var_dump($result->num_rows); here
echo "<b><u>". $row["Book_Title"] ."</u></b><br>";
echo "By ". $row["Author_Name"]. "<br>";
echo "ISBN: ". $row["Book_ISBN"] . "<br><br>";
$ISBN = $row['Book_ISBN'];
$sql2 = "SELECT CONCAT('<DD>(',Inventory.Quantity, ') Copies at the location of ', Inventory.Library_Location,'</DD>') as nCopies
FROM Inventory
JOIN Book
ON Inventory.Book_Id=Book.Book_Id
WHERE $ISBN = Book.Book_ISBN";
$result2 = mysqli_query($conn,$sql2);
while ($row = mysqli_fetch_assoc($result2))
{
echo "" . $row["numOfCopies"] . "<br>";
var_dump($row);
}
var_dump($row);
}
Делаю так в моем БД
SELECT Book.Book_Title,
Book.Author_Name,
Book.Book_ISBN
FROM Book
GROUP BY Book_Title
Дал мне выход
+-----------------------------------------+-------------------------------------------+---------------+
| Book_Title | Author_Name | Book_ISBN |
+-----------------------------------------+-------------------------------------------+---------------+
| 22 11 63 | Stephen King | 9788401344106 |
| A Good Marriage | Stephen King | 9781401104428 |
| Bag of Bones | Stephen King | 9780671024239 |
| Carrie | Stephen King | 9780307743664 |
| Cell | Stephen King | 9781416424419 |
| Christine | Stephen King | 9780441160447 |
| Cujo | Stephen King | 9780441161342 |
| Dark Souls: Design Works | From Software | 9781926778891 |
| Desperation | Stephen King | 9781101137994 |
| Doctor Sleep | Stephen King | 9781441698844 |
| Dragon Age Inquisition: Official Guide | David Knight | 9780804162944 |
| Duma Key | Stephen King | 9788401338090 |
| Everythings Eventual | Stephen King | 9780743447344 |
| Hearts in Atlantis | Stephen King | 9780671024246 |
| Heir to the Jedi: Star Wars | Kevin Hearne | 9780344444848 |
| Insomnia | Stephen King | 9781101138007 |
| IT | Stephen King | 9780441169418 |
| Joyland | Stephen King, Hannes Riffel | 9783641147074 |
| Mile 81 | Stephen King | 9781441664604 |
| Mr. Mercedes | Stephen King | 9781476744474 |
| Pet Sematary | Stephen King | 9780743412278 |
| Prince Caspian | C.S. Lewis, Pauline Baynes | 9780064404003 |
| process control 221 Success Secrets | David Knight | 9781488844672 |
| Secret Window | Stephen King | 9780441213469 |
| Skeleton Crew | Stephen King | 9780441168610 |
| Star Wars DarkSaber | Kevin J. Anderson | 9780307796417 |
| Star Wars I, Jedi | Michael A. Stackpole | 9780443478737 |
| Star Wars Mad Libs | Roger Price, Leonard Stern | 9780843132717 |
| Star Wars Red Harvest | Joe Schreiber | 9780344418490 |
| Star Wars The Essential Atlas | Jason Fry, Daniel Wallace | 9780344477644 |
| Star Wars: Choices of One | Timothy Zahn | 9780344411263 |
| Star Wars: Dark Empire Trilogy | Tom Veitch, Jim Baikie, Cam Kennedy | 9781302466434 |
| Star Wars: Jedi Academy | Jeffery Brown | 9780444404178 |
| Star Wars: Rebel Force: Hostage | Alex Wheeler | 9781484720226 |
| Star Wars: Riptide | Paul S. Kemp | 9780344422467 |
| Star Wars: Rise and Fall of Darth Vader | Ryder Windham | 9781484717874 |
| Tarkin: Star Wars | James Luceno | 9780344411422 |
| The Dead Zone | Stephen King | 9780441144747 |
| The Horse and His Boy | C.S. Lewis, Pauline Baynes | 9780064471060 |
| The Last Battle | C.S. Lewis, Pauline Baynes, David Wiesner | 9780064404034 |
| The Legend of Zelda: Hyrule Historia | Patrick Thorpe | 9781616440417 |
| The Lion, the Witch and the Wardrobe | C.S. Lewis, Pauline Baynes | 9780064471046 |
| The Magicians Nephew | C.S. Lewis, Pauline Baynes | 9780064471107 |
| The Mist | Stephen King | 9780441223296 |
| The Running Man | Stephen King, Richard Bachman | 9780441197962 |
| The Shining | Stephen King | 9780344806789 |
| The Stand | Stephen King | 9780307743688 |
| The Tommyknockers | Stephen King | 9780441146600 |
| Thinner | Stephen King, Richard Bachman | 9780441161344 |
| Under the Dome | Stephen King | 9781476734474 |
+-----------------------------------------+-------------------------------------------+---------------+
и делать
SELECT CONCAT('<DD>(',Inventory.Quantity, ') Copies at the location of ', Inventory.Library_Location,'</DD>') as nCopies
FROM Inventory
JOIN Book
ON Inventory.Book_Id=Book.Book_Id
(пришлось удалить GROUP BY Book_Title, потому что он сказал, что столбец «Book_Id» в выражении группы является неоднозначным) дал мне результаты
+----------------------------------------------------------------+
| nCopies |
+----------------------------------------------------------------+
| <DD>(0) Copies at the location of Sylvania Public Library</DD> |
| <DD>(1) Copies at the location of Carson Library</DD> |
| <DD>(2) Copies at the location of Commuter Public Library</DD> |
| <DD>(0) Copies at the location of Sylvania Public Library</DD> |
| <DD>(2) Copies at the location of Toledo Public Library</DD> |
| <DD>(1) Copies at the location of Carson Library</DD> |
| <DD>(1) Copies at the location of Carson Library</DD> |
| <DD>(2) Copies at the location of Commuter Public Library</DD> |
| <DD>(2) Copies at the location of Toledo Public Library</DD> |
| <DD>(2) Copies at the location of Sylvania Public Library</DD> |
+----------------------------------------------------------------+
Edit: Last Редактировать циклы while, и результаты возвращались следующим образом
22 11 63
By Stephen King
ISBN: 9788401344106
(0) Copies at the location of Sylvania Public Library
(2) Copies at the location of Toledo Public Library
(1) Copies at the location of Carson Library
A Good Marriage
By Stephen King
ISBN: 9781401104428
(1) Copies at the location of Carson Library
(2) Copies at the location of Commuter Public Library
Bag of Bones
By Stephen King
ISBN: 9780671024239
(2) Copies at the location of Toledo Public Library
(2) Copies at the location of Sylvania Public Library
Cell
By Stephen King
ISBN: 9781416424419
(0) Copies at the location of Sylvania Public Library
(1) Copies at the location of Carson Library
(2) Copies at the location of Commuter Public Library
Спасибо @nomistic за помощь, ценю это!
Вы можете попробовать что-то вроде этого. По сути, нужно работать с результатами, полученными для конкретной книги, и затем проходить по местам. (Я знаю, что это немного неуклюже, но это должно сделать работу). Проблема, с которой вы столкнулись выше, заключается в том, что вы выбиваете только первый ряд; PHP не знает, как перебрать подсекцию вашего исходного запроса, если вы не скажете это.
while($row = mysqli_fetch_assoc($result))
{
//had var_dump($row); here
//had var_dump($result->num_rows); here
echo "<b><u>". $row["Book_Title"] ."</u></b><br>";
echo "By ". $row["Author_Name"]. "<br>";
echo "ISBN: ". $row["Book_ISBN"] . "<br>";$ISBN = $row['Book_ISBN'];$sql2 = "SELECT CONCAT('<DD>(',Inventory.Quantity, ') Copies at the location of ', Inventory.Library_Location,'</DD>') as numOfCopies
FROM Book
JOIN Inventory
ON Book.Book_Id=Inventory.Book_Id
WHERE Book.Book_ISBN = '$ISBN'
GROUP BY Book_Title";
$result2 = mysqli_query($conn,$sql2);
while ($row = mysqli_fetch_assoc($result2)) {
echo "" . $row["numOfCopies"] . "<br>";
}
}
Обратите внимание, что вы также можете очистить свой первый запрос, чтобы выдвигать только результаты, необходимые для первого раунда.
Редактировать: только что прилагается $ISBN
в одинарных кавычках, потому что я вижу, вы рассматриваете это как строку. (Хотя я должен сказать, что это очень странный номер ISBN в вашем примере; обычно они числовые и часто хранятся с дефисами, но не буквенно-цифровыми)
Других решений пока нет …