我正在为公共汽车运输系统预订系统。我很难将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到位置3的票价为0.200,从location3到location6的票价为0.400。
请告诉我如何查询MySQL表格的源和目标形式的费率。
答案 0 :(得分: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。然后你会得到双重记录。
但根据您的需要,您还可以使用距离并计算它们。完全取决于您的业务需求。
答案 1 :(得分: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和价格,如@ luc-franken描述的那样。我将其保存为CSV文件,并通过一些正则表达式替换将其转换为MySQL查询。