在PHP中,我想创建一个名为' Foo '的对象。其中包含TagName,Display和分配给该标记名的数字数组。
如果我要查询tagName' bar'我会得到一个显示' Bar Foo Ipsum'和数字33和545。
目前我这样做:
$stmt = $db->prepare("SELECT * FROM DetailsTable");
$stmt->execute();
$details = $stmt->fetchAll();
$stmt = $db->prepare("SELECT * FROM NumbersTable");
$stmt->execute();
$numbers = $stmt->fetchAll();
$myObjects = array();
foreach($details as $detail){
$foo = new Foo($detail['TagName'], $detail['Display']);
foreach($numbers as $number){
if($number['TagName'] == $detail['TagName']){
$foo.appendNumber($number['Numbers']);
}
}
array_push($myObjects, $foo);
}
class Foo {
private $tag, $display;
private $numbers = array();
public function __construct($tag, $display){
$this->tag = $tag;
$this->display = $display;
}
/** Insert getters and setters */
public function appendNumber($n){
array_push($this->numbers, $n);
}
}
上面的代码是伪代码所以我还没编码,但它是我最有可能编写的代码。我想首先问一下这个问题。
基本上,对象Foo应该具有TagName和DisplayName以及一个数字在不同表中的数组。 TagName在DetailsTable中是唯一的。
TL; DR :从DetailsTable
获取详细信息以及NumbersTable
中与其关联的数字并将其放入对象中。
答案 0 :(得分:1)
我认为你可以通过左连接来解决这个问题
这样的事可能吗?
SELECT * FROM NumbersTable LEFT JOIN DetailsTable ON NumbersTable.TagName = DetailsTable.TagName
答案 1 :(得分:1)
你应该让SQL引擎完成匹配两个表中记录的工作,这是它擅长的地方。
您的代码看起来会像这样:
$stmt = $db->prepare("SELECT d.TagName, d.Display, n.Numbers
FROM DetailsTable d
LEFT JOIN NumbersTable n
ON n.TagName = d.TagName");
$stmt->execute();
$currentTag = "";
foreach ($stmt->fetchAll() as $record) {
if ($record['TagName'] !== $currentTag) {
$myObjects[] = $foo = new Foo($currentTag = $record['TagName'], $record['Display']);
}
$foo.appendNumber($record['Numbers']);
}