LoginSignup
0
0

More than 1 year has passed since last update.

phpMyFAQの業務導入顛末記(その2)~データ移行編(前編)~

Last updated at Posted at 2021-11-14

2023/05/20 本記事投稿後に、Accessを用いたより効率的なデータ移行方法を見出したため、本記事はあくまでアーカイブ的な位置づけになります。

前回は、筆者の職場のCentOSサーバーにphpMyFAQがインストール完了したところまで書きました。
ただ残念ながら、phpMyFAQの内部構造に関する日本語/英語の情報はほとんどないので、
 実際に画面からデータを入力 ⇒ どのテーブルにどうデータに格納されるかを確認・・・
という地道な調査にもとづき、何とかデータ移行完了した顛末(前編)です。


インストールしたphpMyFAQを職場内の情報共有プラットフォームとするためには、とりあえず記入例を兼ねた賑やかしのデータが必要になります。

もともと筆者の職場では、簡単な掲示板ツールで作業内容などを記入してきたので、とりあえずテキストベースのデータは存在します。
そこで、それらのデータを次のようなレイアウトのExcelシートに整理してもらうことにしました。
image.png

ところで、phpMyFAQが使うMariaDBのデータベースには、全部で41個もの(!!)テーブルが作成されています。
ただし、この中で大元のFAQデータ本体を使うには、とりあえず
・faqdata:投稿記事の本文
・faqdata_user:投稿した記事と投稿ユーザーとの紐付け
の2つのデータがあれば十分です。
image.png
Exceシートに整理してもらった内容をもとに、ExcelVBAでこれらテーブルに対する移行データを作成します。

faqdataのレイアウト
image.png
faqdata_userのレイアウト
image.png

筆者の例では、投稿方法に"WYSIWYG"エディタを設定しているため、本文データにHTMLタグを付与しています。
設定によってはテキストベースでデータ共有もできますが、その場合はタグ装飾は不要です。

faqdataテーブルへの移行データ作成
Option Explicit
Public Sub sPb_移行データ作成( )

    Dim sh1 As WorkSheet, sh2 As WorkSheet, sh3 As WorkSheet
    Dim i As Long, j As Long, k As Long, contents As String
    Dim dbdata1(1 To 19) As Variant, dbdata2(1 To 2) As Variant
    Const cPr_開始ID = -1

    i = 2
    j = 1
    k = 1
    Set sh1 = ThisWorkbook.Sheets("faqdata_org")                ' 移行元データの入ったシート
    Set sh2 = ThisWorkbook.Sheets("faqdata")                    ' faqdataの移行データ
    Set sh3 = ThisWorkbook.Sheets("faqdata_user")               ' faqdata_userの移行データ
 
    Application.ScreenUpdating = False
    Application.Caluculation = xlCalculationManual
    With sh1
        Do While (Not IsEmpty(.Cells(i, 1)))
            If IsEmpty(.Cells(i, 2)) Then GoTo NextRec

             ***** faqdata用インポートデータ *****
            dbdata1(1) = cPr_開始ID + i                        ' ID:連番
            dbdata1(2) = "ja"                                 ' 言語:"ja"固定
            dbdata1(3) = 1000 + cPr_開始ID + i                 ' ユーザー指定のID:1000~の連番
            dbdata1(4) = 0                                     ' リビジョンNo:0固定
            dbdata1(5) = "yes"                                 ' 有効フラグ
            dbdata1(6) = 0                                     ' ?
            dbdata1(7) = ""                                    ' キーワード
            dbdata1(8) = Replace(.Cells(i, 1), ",", "、")      ' タイトル:カンマを置換
            contents = Replace(.Cells(i, 2), ",", "、")        ' 本文:カンマを置換後、HTMLタグを付与して設定
            contents = Replace(contents, vbLf, "<br />")
            contents = "<!DOCTYPE html>" ' vbLf & "<html>" & vbLf & "<head>" & vbLf & "</head>" & vbLf & "<body>" &vbLf & contents & "</body>" & vbLf & "</html>"
            dbdata1(9) = contents
            dbdata1(10) = .Cells(i, 4)                         ' 投稿者
            dbdata1(11) = .Cells(i, 5)                         ' メールアドレス
            dbdata1(12) = "y"                                  ' コメント受付可否
            dbdata1(13) = Format$(Now(), "yyyymmddhhmmss")     ' 更新日時
            dbdata1(14) = ""                                   ' ?
            dbdata1(15) = 0                                    ' ?
            dbdata1(16) = "00000000000000"                     ' 公開開始日時:固定値
            dbdata1(17) = "99991231235959"                     ' 公開終了日時:固定値
            dbdata1(18) = Format$(Now(), "yyyy/mm/dd hh:mm:ss")' 作成日時
            dbdata1(19) = .Cells(i, 6)                         ' 編集者備考
            sh2.Range("A" & j & ":S" & j) = dbdata1            ' シートに一括転送
            j = j + 1

            ' ***** faqdata_user用インポートデータ *****
            dbdata2(1) = cPri_開始ID + i
            dbdata2(2) = -1
            sh3.Range("A" & k & ":B" & k) = dbdata2
            k = k + 1

NextRec:
            i = i + 1
        Loop
    End With
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True

    MsgBox "データ変換処理が完了しました", vbInformation, "お知らせ"

End Sub

上記VBAで作ったワークシートの内容をコピー⇒エディタに貼りつけし、Tab⇒","に置換したものを、phpMyAdminのインポート機能でインポートします。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0