2017-10-04 4 views
1

2つの別個のMySQL(バージョン5.6.37)クエリを渡したり、トランザクションを使用したりしないようにしようとしています。私はこれが単一のクエリで実行できると思いますが、どこに間違っているのかを知る必要があります。MySQLの列を文字列に変換する

私はこのクエリを使用する場合:

SELECT titles.t_id,title,cover,pageData.pageNum 
FROM titles 
    JOIN biblio  ON titles.t_id = biblio 
    JOIN pageData ON biblio.t_id = pageData.t_id 
WHERE titles.t_id = '1'; 

をそれが正常に冗長データの3つの列に結果を返し、新しいデータの1列のみ(P_ID):

t_id | title    | cover | pageNum 
1 | The Art of the Deal | 32.jpg | 1 
1 | The Art of the Deal | 32.jpg | 2 
1 | The Art of the Deal | 32.jpg | 3 
1 | The Art of the Deal | 32.jpg | 4 
1 | The Art of the Deal | 32.jpg | 5 

私は思います pageNum列の新しいデータが次のように1つの結果(つまり、整数値から区切られた文字列に変換される)にフラット化されるようにクエリを変更する方法があります。

t_id | title    | cover | p_id 
1 | The Art of the Deal | 32.jpg | 1,2,3,4,5 

私はSELECT内でサブSELECTを試していましたが、一貫した構文エラーがあります。 上記の結果を得るために、以下の2つのクエリを組み合わせる方法はありますか?

SELECT titles.t_id,title,cover 
FROM titles 
    JOIN biblio  ON titles.t_id = biblio 
WHERE titles.t_id = '1'; 

SELECT pageData.pageNum FROM pageData WHERE pageData.t_id = '1' 

答えて

1

あなたは簡単にMySQLの機能GROUP_CONCAT()を用いて達成することができる必要がある結果JOIN biblio ON titles.t_id = biblio.t_idを意味と仮定。
有効なSQLクエリを生成し、あなたが期待する結果を得るために、あなたはまた、クエリにGROUP BY clauseを追加し、それにSELECT句に表示される他のすべての列を配置する必要があります。

SELECT titles.t_id, title, cover, GROUP_CONCAT(pageData.pageNum) AS p_id 
FROM titles 
    JOIN biblio  ON titles.t_id = biblio 
    JOIN pageData ON biblio.t_id = pageData.t_id 
WHERE titles.t_id = '1' 
GROUP BY titles.t_id, title, cover 
+0

すべての偉大な答え。これは、それが最高のことを説明します。皆さんありがとうございました。 – Parapluie

3

あなたはそのためにGROUP BYと組み合わせてGROUP_CONCATを使用することができます。

SELECT 
    titles.t_id 
    , title,cover 
    , GROUP_CONCAT(pageData.pageNum) AS p_id 
FROM titles 
    JOIN biblio  ON titles.t_id = biblio 
    JOIN pageData ON biblio.t_id = pageData.t_id 
WHERE titles.t_id = '1' 
GROUP BY 
    t_id 
, title 
, cover 
2

GROUP_CONCAT機能を使用してください。また、あなたが

SELECT t.t_id, title, cover, GROUP_CONCAT(pageData.pageNum) AS pageNum 
FROM titles t 
JOIN biblio b ON t.t_id = b.t_id 
JOIN pageData p ON b.t_id = p.t_id 
WHERE t.t_id = '1' 
GROUP BY t.t_id, title, cover 
関連する問題