如何在SQL中输入这两个表,表a和表b。
table a:
+----+-------+--------+--------+
| id | name | data1 | data2 |
+----+-------+--------+--------+
table b:
+----+------------+-------+--------+--------+
| id | member_id | a_id | data1 | data2 |
+----+------------+-------+--------+--------+
所以我想从表a中获取所有值。
我还想从表b中获取data {2 value = true
a.id = b.a_id.
如果表a中的数据没有表b中的值a.id = b.a_id, data2 = 0, value = false.
如果使用SQL会发生这种情况会很好但如果没有,至少要告诉你如何使用PHP或codeigniter解决问题,或者只发布你的概念/算法。提前谢谢。
EDIT2:
好的,我明白了。谢谢以下所有分享他们想法的人。他们提供了很多帮助:
模型:
function getData2(){
$id = $this->uri->segment(3);
$this->db->select("t.*, mt.mid as mid, mt.amt as mtamt");
$this->db->from("transaction as t");
$this->db->join("mtrans as mt", "mt.tid = t.id and mt.mid = '$id'", "left outer");
$query = $this->db->get();
$data['info2'] = $query->result_array();
return $data;
}
视图:
<?php foreach ($info2["info2"] as $record) { ?>
<tr>
<td><?php echo $record["id"]; ?></td>
<td><?php echo $record["name"]; ?></td>
<td><?php echo $record["type"]; ?></td>
<td><?php echo $record["amt"]; ?></td>
<?php foreach ($info1["info1"] as $stat) {
if($record["mid"] == $this->uri->segment(3)){?>
<td><?php echo $stat["mtamt"]; ?></td>
<td><?php echo $stat["user"]; ?></td>
<td><?php
if(!$stat["mtamt"]){
echo "Unpaid";
}
if($stat["mtamt"] < $record["amt"]){
echo "Partial";
}
if($stat["mtamt"] == $record["amt"]){
echo "Paid";
}
?></td>
<?php } } ?>
</tr>
<?php } ?>
答案 0 :(得分:3)
尝试类似
的内容select
a.*,
IFNULL(b.data2, 0) as b_data2,
IF(b.data2 IS NULL, false, true) as value
from a left outer join b
on a.id = b.a_id
它根据键连接两个表并检索相关记录。
已更新以允许空值。 IFNULL
检查值是否为空,如果不是,则返回值,否则返回第二个参数,在本例中为false
。
IF
函数的工作方式类似于if代码语句,如果相等为真则返回第一个参数,如果不是则返回第二个参数。
我假设b.data2
可以为null,没有详细的表格结构,这一切都是猜测。
答案 1 :(得分:0)
尝试此查询
SELECT a1.id, a1.name, a1.data1, a1.data2, (b1.data2) data FROM a a1
INNER JOIN b b1 ON b1.id= a1.a_id
WHERE b1.data2 = true
我将别名作为data
的第二个表的属性,它对你来说很简单
答案 2 :(得分:0)
select
a.id,
a.name,
a.data1,
a.data2
from tablea a
inner join (select * from table b where data2 = True) b on a.id = b.id
有点粗糙,也许并不包含你需要的所有数据,尽管这是我从你给我的内容中推断出的最好的数据,并且应该给你一个良好的连接起点。对不起,我无法测试,因为我目前没有环境。
如果要链接两个条件匹配的两个表,请使用内部联接:a.id = b.id
如果您不需要匹配,则使用外连接。 更多资源: