自动对列进行排序

时间:2017-11-15 12:27:01

标签: php mysql

我有一个数据库表,其中包含一些足球比赛,每周3次,我在这个例子的表格中写了这些:

week  |team1   |team2   |date1   |time1   |team3  |team4  |date2  |time2  |
46    |Chelsea |Man Utd |18/11   |13:30   |Arsenal|Stoke  |19/11  |18:00  |

然后我有这个代码来调用它们:

"SELECT * FROM table_name WHERE week = '$week'";

... $week = Date('W');

echo $row['team1'].' - '.$row['team2'].'<br />
'.$row['team3'].' - '.$row['team4'].';

等等。但有时日期或时间会发生变化,所以我必须再次制作整行,否则它仍将首先显示第一个匹配,即使其他匹配将首先播放。让Chelea - Man Utd在18:00搬到20/11。我可以以某种方式改变行中的日期和时间,并使匹配在前端重新排列吗?

很抱歉,如果我有点难以理解我在谈论的内容:)

2 个答案:

答案 0 :(得分:1)

首先,我认为您的表格格式不正确,您不应该有field1field2field3等字段...如果您需要:您应该创建另一个表:D喜欢:或者你有一个逻辑问题。我认为这样的架构可以更好地添加到您的数据库中:

# table team
id  | name
1   | Chelsea
2   | Man Utd 
3   | Arsenal
4   | Stoke

如果团队更改此名称,则效率更高,如果值在其他表中为一次。

# table match
id  | local_team_id | external_team_id | dateTime             | week | score ^_^
1   | 1             | 2                | 2017-11-14 19:30:06  | 46   | 2-0
2   | 3             | 4                | 2017-11-15 18:30:21  | 46   | 2-0

另外,如果可能的话,永远不要使用SELECT * FROM your_table无效,并且对性能非常不利。您必须在您的请求中返回PHP中所需的值。不多。

您可以在样本中写下:

"SELECT team1, team2, team3, team4 FROM table_name WHERE week='$week'"

但是,即使这样,你也可能遇到SQL injection的问题。您可以使用PHP方法或使用PDO和prepare query来修复它。使用PDO的请求样本:

$query = "SELECT team1, team2, team3, team4 FROM table_name WHERE week= :week"
$dbh->prepare($query, , array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$dbh->execute([':week' => $week]);

因此,为了回答您的问题,您可以订购结果列,并在请求中定义字段:

SELECT first, second, third FROM table_name

您可以使用ORDER BY子句(请参阅文档here)对行结果进行排序:

SELECT team1, team2, team3, team4, week FROM table_name ORDER_BY week DESC

希望我帮助你。

答案 1 :(得分:0)

当您询问如何重新设计或查询现有数据结构时,请包括数据结构的定义(在您的情况下,CREATE TABLE语句)以及它包含的数据示例。

你的问题的标题谈论排序 - 但问题的主体是关于比赛的日期/时间如何变化。如果要控制从SQL DBMS检索行的顺序,则SQL有一个解决方案 - 在SELECT语句中指定ORDER BY clause

但我怀疑你的问题是你将多个匹配的详细信息放在表格的一行中。这是非常错误的。

描述匹配的表格每行只能包含一个匹配项。可以说,它也不应该包含团队(因为两个团队都与匹配具有相同的物理关系,使用不同的列来保持它们会产生人为的差异)但是对于大多数目的来说这可能是过度的。

我会将其实现为:

AttributeViewModel

(根据使用情况,可能需要其他指数)。

我假设这一周可以从日期时间得出(例如,如果第40周的比赛被推迟7天,则认为是在第41周)。

如果你想显示在一周内发生的所有匹配作为前端的一行,那么,尽管可以在SELECT语句的输出中以这种方式格式化数据,你应该在PHP代码中处理它。