MySQL Query:根据选定的ID水平连接

时间:2016-07-27 15:26:36

标签: mysql sql database

假设我有一个表'table_name',其中有两列如下:

table_name
------------
my_id | data
------|-----
  id1 | 312
  id1 | 523
  id1 | 128
  id2 | 239
  id2 | 479
  id2 | 121
  id3 | 639
  id3 | 429
  id3 | 131
  id4 | 473
  id4 | 872
  id4 | 662
  id4 | 174
  id4 | 272

我试了一会儿,现在我找到了一种方法来选择我想要使用的ID:

SELECT DISTINCT my_id from table_name WHERE (my_id REGEXP 'id[234]')

这给了我'id'id2','id3'和'id4'。我如何根据下面选择的ID制定一个给出我所需输出的查询?

id2 | id3 | id4
---------------
239 | 639 | 473
479 | 429 | 872
121 | 131 | 662
NaN | NaN | 174
NaN | NaN | 272

2 个答案:

答案 0 :(得分:1)

首先创建一个选择不同的id

的函数
public function get_id_of_table_name() {
    $sql = 'SELECT DISTINCT my_id ';
    $sql .= 'FROM table_name ';

    $query = $this->db->query($sql);

    $result = $query->row();
    foreach ($result as $key => $value)
    {
      $result->data = $this->get_data($result->my_id);
    }

    return ( $query->num_rows() ) ? $result : FALSE;
}

并创建第二个功能,根据id&#39>收集所有数据

public function get_data($my_id) {
    $params = [];

    $sql = 'SELECT data ';
    $sql .= 'FROM table_name ';
    $sql .= 'WHERE my_id = ? ';

    $params[] = $my_id;

    $query = $this->db->query($sql, $params);

    $result_data = $query->result();
    $data = [];

    foreach ($result_data as $result)
    {
        array_push($data, $result->data);
    }

    return $data;
}

如果需要,可以在第一个函数中放置where子句。

$sql .= 'WHERE my_id = ? ';

并添加参数

$params[] = $my_id;

你也可以在第一个函数中添加参数my_id作为数组,这样你就可以获得你想要的id

$id = ["id2","id3","id4"];

public function get_id_of_table_name($id) {
    $params = [];

    $sql = 'SELECT DISTINCT my_id ';
    $sql .= 'FROM table_name ';
    $sql .= 'WHERE 1 ';

    foreach ($id as $my_id)
    {
        $sql .= 'OR (my_id = ?) ';

        $params[] = $my_id;
    }

    $query = $this->db->query($sql, $params);

    $result = $query->row();
    foreach ($result as $key => $value)
    {
      $result->data = $this->get_data($result->my_id);
    }

    return ( $query->num_rows() ) ? $result : FALSE;
}

答案 1 :(得分:1)

如果您的表格实际上只有这两列,而且没有可用于订购data列的相关数据,那么就没有好的方法来实现您的排序。寻找。

关系数据没有任何内在的"顺序"即使您已按特定顺序插入数据或在此处以某种方式显示数据。如果你的表真的只有那两列,那么就很难匹配"第一个"使用"第一个"的id2值id3值等等以获得所需的输出。我们可能会在查询中对它们进行排名,并根据该等级(升序或降序)进行匹配,或者甚至提供一些随机订单功能,但是没有记录(即可靠)方式来获取订单你已经提供了。

虽然表确实对存储中的基础位有物理顺序,而某些产品允许您通过物理rowid(Oracle)访问它们,但我所知道的RDBMS(包括MySql)都不能保证除非在select语句中使用order by子句,否则将返回行的顺序。这是字面上的设计,被认为是一个"功能"来自E.F. Codd的研究。