SQL表连接

时间:2014-03-05 10:58:30

标签: php mysql sql codeigniter

如何在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 } ?>

3 个答案:

答案 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

如果您不需要匹配,则使用外连接。 更多资源: