0

ここで困惑している。

テーブルが1つあるので、本棚と呼びましょう。テーブルには次のフィールドがあります。

[shelf_id、title、latest_books]

次に、フィールドのある本の表があります。

[book_id、shelf_id、title、date_added]

各本は棚に割り当てられます。これが私がやりたいことです...

すべての本棚について、その本棚に割り当てられている本を探し、それらの本からbook_idを取得して、コンマで区切られた本棚フィールド「latest_books」にフィードします。さらに複雑にするために(?)棚ごとに5つのbook_idだけが必要です。それが簡単になれば、それぞれから1つだけで行うことができます。これを手動で1つずつ実行するために使用できるクエリは次のとおりです。

update bookshelves
set latest_books = 
    (select book_id from books 
        where shelf_id = 1 
        order by date_added DESC 
        limit 0,1)
where shelf_id = 1;

本棚と本のテーブルの両方に何万ものレコードがあるので..私はそれを一つずつ行うことができますが、私は一年中それをします。

私はCentOSのMySQLで作業しています。スクリプトなどを使ってかっこいいです。

4

1 に答える 1

0

さて、私はそれを理解しました..それはここでそれを詳細にタイプするのを助けました...

本棚のIDをcsvにエクスポートしてから、bashスクリプトの配列に配置しました。

shelves=(
1
...
...
99999
)

for i in "${shelves[@]}"
do
        query='update bookshelves set latest_books = (select book_id from books where shelf_id = '$i' order by date_addet desc limit 0,1) where latest_books = "" and shelf_id = '$i' ;'
        mysql -uxxxx  -pxxx database_name -e "$query"

done

テストデータベースでスクリプトを数回実行し、必要なことを実行したようです。

于 2012-10-04T04:17:49.400 に答える