0

バス輸送システムの予約システムに取り組んでいます。MySQLでFareテーブルをテーブルとして表すのに問題があります。スプレッドシート文書として私に渡された特定のルートの運賃表の例を以下に添付しました。これをMySQLテーブルとして表す方法を教えてください。

これは、指定されたルートの1つの一部にすぎないことに注意してください。実際のルートには40以上の場所があり、そのようなルートは30以上あります。ですから、なんとかしてこのエクセルシートをそのままSQLにエクスポートしたいと思っています。

location1   |           |           |           |
0.100       | location2 |           |           |    
0.200       | 0.200     |location3  |           |
0.300       | 0.300     |0.200      |location4  |           
0.500       | 0.500     |0.400      |0.300      |location5  |       
0.500       | 0.500     |0.400      |0.300      |0.200      |location6

ここで、ロケーション1からロケーション3への移動料金は0.200になり、ロケーション3からロケーション6への移動料金は0.400になります。

実装後にMySQLテーブルからソースと宛先を指定してレートをクエリする方法を教えてください。

4

2 に答える 2

3

同じように:

RATES
location_from
location_to
price

そして見上げる:

SELECT price FROM rates WHERE location_from=3 AND location_to=4

戻ります: 0.400

location_form は常に最も小さい値で入力するため、4、3 を追加しないでください。すると、2 つのレコードが取得されます。

ただし、必要に応じて、距離を操作して計算することもできます。あなたのビジネスニーズに完全に依存します。

于 2012-07-21T08:38:58.713 に答える
0

Excelで次のVBマクロを使用してテーブルに変換し、テキスト処理をMySQLクエリに変換してデータベースに挿入することができました

Sub ReversePivotTable()
'   Before running this, make sure you have a summary table with column headers.
'   The output table will have three columns.
    Dim SummaryTable As Range, OutputRange As Range
    Dim OutRow As Long
    Dim r As Long, c As Long

    On Error Resume Next
    Set SummaryTable = ActiveCell.CurrentRegion
    If SummaryTable.Count = 1 Or SummaryTable.Rows.Count < 3 Then
        MsgBox "Select a cell within the summary table.", vbCritical
        Exit Sub
    End If
    SummaryTable.Select
    Set OutputRange = Application.InputBox(prompt:="Select a cell for the 3-column output", Type:=8)
'   Convert the range
    OutRow = 2
    Application.ScreenUpdating = False
    OutputRange.Range("A1:C3") = Array("To", "From", "Fare")
    For r = 2 To SummaryTable.Rows.Count
        For c = 2 To SummaryTable.Columns.Count
            If SummaryTable.Cells(r, c) <> Empty And IsNumeric(SummaryTable.Cells(r, c)) Then
                OutputRange.Cells(OutRow, 1) = SummaryTable.Cells(r, r)
                OutputRange.Cells(OutRow, 2) = SummaryTable.Cells(c, c)
                OutputRange.Cells(OutRow, 3) = SummaryTable.Cells(r, c)
                OutputRange.Cells(OutRow, 3).NumberFormat = SummaryTable.Cells(r, c).NumberFormat
                OutRow = OutRow + 1
            End If
        Next c
    Next r
End Sub

これにより、@luc-franken が説明したように、location_from、location_to、および price を示す 3 つの列が得られます。これを CSV ファイルとして保存し、いくつかの正規表現置換を使用して、それを MySQL クエリに変換しました。

于 2012-07-21T12:03:00.930 に答える