0

簡単にしてみます。私は自分の本用のテーブル、著者用のテーブル、および著者 ID を持つ私の本からの ID を持つジャンクション テーブルを持っています。

今私の問題は、本に多くの著者がいる場合、本を複数回リストしたくないということです。Group By を使用することもできますが、本を 1 回だけ一覧表示する方法を探しています。1 人の著者だけを表示するのではなく、複数の著者がいる場合は、同じリストに他の著者を追加したいと考えています。 .

日中は本当にこれについて考えましたが、良い方法が思いつきません。どんな助けでも大歓迎です!

ありがとう!

4

3 に答える 3

4

あなたが探しているのはGROUP_CONCATだと思います

SELECT b.Name, GROUP_CONCAT(a.Name) AS Authors
FROM Book b 
    INNER JOIN BookAuthor ba
    ON b.ID = ba.BookID
    INNER JOIN Author a
    ON ba.AuthorID = a.ID
GROUP BY b.Name;

出力を提供します

50 Shades of Grey                                           EL James
Design Patterns: Elements of Reusable Object-Oriented Software  Ralph
Johnson,Erich Gamma,John Vlissides,Richard Helm
Harry Potter and the Goblet of Fire                         JK Rowling 
Harry Potter and the  Philosopher`s Stone                   JK Rowling

SQLフィドルはこちら

于 2012-10-03T06:47:36.420 に答える
1

2 つの SQL ステートメントを実行します。このようなもの...

$sql = "SELECT id, name FROM books";

foreach ($conn->query($sql) as $book) {
    $sql = "SELECT a.name
            FROM authors a, author_books ab
            WHERE ab.book_id = $book['id']
            AND ab.author_id = a.id";

    foreach ($conn->query($sql) as $author) {
        echo $row["name"];
    }
}

乾杯

于 2012-10-03T01:58:47.520 に答える
0

この例を参照してください

CREATE TABLE book
(
bID INT,
bName VARCHAR(100),
PRIMARY KEY (bID)
);
--
CREATE TABLE author
(
aID INT,
aName VARCHAR(100),
PRIMARY KEY (aID)
);

CREATE TABLE book_author
(
aID INT ,
bID INT ,
PRIMARY KEY (aID,bID),
FOREIGN KEY (aID) REFERENCES author(aID),
FOREIGN KEY (bID) REFERENCES book(bID)
); 

INSERT INTO author (aID, aName) VALUES
    (1, 'The Doctor'),
    (2, 'Dalek1'),
    (3, 'Dalek2'),
    (4, 'Amy'),
    (5, 'Rory');

INSERT INTO book (bID, bName) VALUES
    (1, 'The Book of Crazy'),
    (2, 'Is Time Really Time'),
    (3, 'I Think without Pants'),
    (4, 'Perfection'),
    (5, 'Rise of the Daleks ');

INSERT INTO book_author (aID, bID) VALUES
    (4, 1),
    (1, 2),
    (4, 2),
    (5, 2),
    (1, 3),
    (2, 4),
    (2, 5),
    (3, 5);

----------
--the query
SELECT DISTINCT b.bName
FROM book b,author a,book_author ba
WHERE ba.aID=a.aID and ba.bID=b.bID and (a.aName = 'Amy' or a.aName='The Doctor')

--------------
--output
--Is Time Really Time
--I Think without Pants
--The Book of Crazy

DISTINCT キーワードを使用し、Justin Wood の方法に従うだけです。

于 2012-10-03T03:04:43.597 に答える