繁体   English   中英

我如何模式php数据库调用?

[英]how do i pattern a php database call?

规范:PHP 5,mySQL构建于Codeigniter Framework之上。

我有一个名为game的数据库表,然后是footballGame gamefootballGame等特定soccerGame 这些运动特定表有一个gameId字段链接回game表。 我有相应的类gamesoccerGame / footballGame ,其中两个延伸game

当我查找要向用户显示的游戏信息时,我无法确定如何动态链接这两个表。 我很好奇是否有可能通过一个查询获得所有信息。 问题是,我需要首先查询game桌以找出运动名称。

如果那是不可能的,我的下一个想法是用两个查询来做。 让我的game_model查询游戏表,然后根据运动名称,调用适当的运动特定模型(即soccer_game_model )并获得运动特定信息。

我还将game对象传递给soccer_modelsoccer_model将使用该对象为我构建一个soccerGame对象。 这对我来说有点傻,因为我正在构建父对象,然后将它提供给扩展类来创建一个全新的对象?

想法?

谢谢您的帮助。

编辑:

游戏桌

gameId
sport (soccer, basketball, football, etc)
date
other data

足球游戏桌

soccerGameId
gameId
soccer specific information

足球游戏桌

footballGameId
gameId
football specific information

等等其他运动

所以我需要知道这项运动是什么,然后我才能决定从哪个运动特定的桌子提取信息。

更新:

感谢大家的投入。 似乎动态SQL只能通过存储过程实现,这是我现在不太熟悉的东西。 即使有它们,它仍然有点凌乱。 现在我将进入两个查询路线,一个获取运动名称,然后切换到获得正确的模型。

从现在的PHP方面来看,获取game对象,将其传递给我的soccer_game_model似乎有点傻,然后让我返回一个soccer_game对象,这是原始game的孩子。 这是怎么做的? 或者我是否从OO的角度遗漏了一些东西?

UPDATE

在查找游戏数据时,请考虑传递“sport”参数。 作为一个隐藏的领域,最有可能。 然后,您可以在模型中使用switch语句:

switch($gameValue) {
  case 'football': $gameTable = "footballGame"; break;
  case 'soccer': $gameTable = "soccerGame"; break;
}

然后将您的查询基于此:

"SELECT * 
FROM ". $gameTable . "
...etc

您可以将表与联接组合在一起。 http://www.w3schools.com/sql/sql_join.asp

例如,如果您需要根据footballGameId 15获取来自gamefootballGame的所有数据:

SELECT *
FROM footballGame a
LEFT OUTER JOIN game b ON a.id = b.gameId
WHERE footballGameId = 15

为了扩展Devin Young的答案,你可以使用Codeigniter的活动记录类来实现这一点,如下所示:

public function get_game_by_id($game_id, $table)
{
    return $this->db->join('game', 'game.id = ' . $table .  '.gameId', 'left')
    ->where($table . '.gameId', $game_id)
    ->get('game')
    ->result();
}

所以你要通过共享的gameId加入表,然后使用where子句找到正确的子句。 最后,使用result()返回一个对象数组。

编辑:我添加了第二个表参数,允许您传递表格的名称,您可以加入soccerGame,footballGame table等。

如果您不知道在该计划中此时选择哪项运动,那么您可能想退后一步,看看如何添加,以便您知道。 我不愿意为所有运动表添加多个连接,因为你会遇到问题。

有关如何通过标准查询执行此操作的选项请查看此Stack Overflow应答 然后,如果你愿意,你可以把它变成活动记录(虽然如果你的应用程序中不需要与数据库无关的调用,这可能很复杂并且不值得你花时间)。

哇它的价值,做多个查询没什么不对,它可能比另一个慢。 尝试一些选项,看看什么最适合您和您的应用程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM