从foreach结果中选择值

时间:2016-12-14 03:06:45

标签: php mysql html5 codeigniter

您好有办法从每个foreach结果中获取值。 例如,我有一个名为tblsamp的表。

id |   data   |
1  |    d1    |
2  |    d2    |
3  |    d3    |

然后提出一些疑问:

$query = $this->db->query("SELECT * FROM tblsamp");
foreach ($query->result() as $row){
echo $row->data .'<br>';   
} 

结果是:

d1
d2
d3

现在我想要的是我想得到第一个结果的值并比较另一个表的值,依此类推......

例如:

if('d1' == '(value from another table)'{
 \\do something here
} else if ('d2' == '(value from another table)'{
 \\and so on.....
}

我怎么能这样做? TIA!

3 个答案:

答案 0 :(得分:1)

您可以在查询中添加查询,但不建议这样做 - 事情可能会变得非常慢。它可能是这样的:

// your original query
$query = $this->db->query("SELECT * FROM tblsamp");
foreach ($query->result() as $row){
    // for each record in your original query, we run a new query derived from the result
    // OBVIOUSLY you need to change this line of code to be specific to
    // your database table's structure because some_col is probably not
    // the name of a column in your database
    $subquery = $this->db->query("SELECT * FROM other_table WHERE foo=" . $row->some_col);
    $subrows = $subquery->result();
    // output $subrows here?
    // note that $subrows might be an array with any number any number of records
}

确切的代码取决于您使用的db类。如果我没有弄错的话,它的代码是什么?编辑:它是codeigniter。

这里的正确解决方案将取决于您的数据库表定义。我强烈建议使用CodeIgniter创建一个JOIN,但是如果不知道你的数据库结构将会是什么样子以及第一个表中每个记录存在多少第二个表中的记录,我就无法提供更多的建议。

答案 1 :(得分:1)

看起来您正在使用基于$this->db->query语法的codeigniter。使用codeigniter,您可以使用$query->result_array()将表格更改为数组。

如果您确定两个表的行数相同,则可以使用以下内容。

$query = $this->db->query("SELECT * FROM tbl1");
$table1 = $query->result_array();
$query = $this->db->query("SELECT * FROM tbl2");
$table2 = $query->result_array();
for ($x = 0; $x <= count($table1); $x++) {
    if ($table1[$x] === $table2[$x]) {
        //DO SOMETHING HERE
    }
} 

如果$table1 的行数可能比table2,我会将其更改为

$query = $this->db->query("SELECT * FROM tbl1");
$table1 = $query->result_array();
$query = $this->db->query("SELECT * FROM tbl2");
$table2 = $query->result_array();
for ($x = 0; $x <= count($table1); $x++) {
    if (isset($table1[$x]) && isset($table2[$x])) {
        if ($table1[$x] === $table2[$x]) {
            //DO SOMETHING HERE
        }
    } else {
        break;
    }
} 

答案 2 :(得分:1)

您可以在2个表中找到匹配项,但是您可能希望对SQL查询如何从多个表中返回数据进行更多研究

How can an SQL query return data from multiple tables

这可能适用于您的基本示例

$query = $this->db->query("SELECT * FROM tblsamp,tblother");   

$rst = mysql_query($query);

if(mysql_affected_rows() > 0) {

  while($row = mysql_fetch_array($rst)) :
    if($row['data'] == '$row['otherdata']') {
      echo 'you got a match' . $row['data'] . ' In table sample to ' . $row['otherdata'] . ' In other table<br>';
    }
    else {
      echo ' no match found in results;
    }
}
endwhile;