0

我正在开发公共汽车运输系统的预订系统。我在将 Fare 表表示为 MySQL 中的表时遇到了困难。下面附上了以电子表格文件形式提供给我的一条特定路线的票价表示例。请让我知道如何将其表示为 MySQL 表。

请注意,这只是指定路线之一的一部分。实际路线有40多个地点,这样的路线有30多个。所以,我希望以某种方式将这个excel表导出到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

这里从 location1 到 location 3 的票价是 0.200,从 location3 到 location6 的票价是 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。然后你得到双记录。

但是根据您的需要,您也可以使用距离并计算它们。完全取决于您的业务需求。

于 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

这将给我 3 列说明 location_from、location_to 和 price,如 @luc-franken 所述。我将其保存为 CSV 文件,并通过一些正则表达式替换设法将其转换为 MySQL 查询。

于 2012-07-21T12:03:00.930 回答