【问题标题】:php join query - array resultsphp 连接查询 - 数组结果
【发布时间】:2012-01-01 12:54:44
【问题描述】:

这是我的桌子:

units_main:
FACID----sub_key-----ASGMT_Name
AR01____1000_______LEGAL COMMAND
AR01____1001_______OPPS 67
AR02____1002_______REG D


units_sub:
FACID-----sub_key-----Long_Name
AR01_____1000_______cmd a, b and sometimes c
AR01_____1000_______secondary cmd structrue
AR01_____1001_______opps seg 798 b
AR02_____1002_______s cmd structure cc8

我通过登录页面的 URL 中的 $_GET 变量将 FACID 传递给查询,然后将 $_GET 设置为 $_SESSION 变量。基于这个FACID,我想查询units_main,然后通过sub_key 加入units_sub 的记录。

Here's my query:

$real_facid = $_SESSION['facid'];
$query = "SELECT m.FACID
 , m.sub_key
 , m.ASGMT_Name
 , s.Long_Name
FROM units_main AS m
LEFT OUTER
JOIN units_sub AS s
ON s.FACID = m.FACID
AND s.sub_key = m.sub_key
WHERE m.FACID = '$real_facid'
ORDER
BY m.FACID
, m.sub_key
, s.Long_Name";

在这里我运行查询并获取数组:

$result = mysql_query($query) or die(mysql_error());
while ($rows = mysql_fetch_array($result)){
echo $rows['ASGMT_Name'];
echo $rows['Long_Name'];}

查询有效,但对于 FACID=AR01,我得到以下结果:

LEGAL COMMAND
cmd a, b and sometimes c
LEGAL COMMAND
secondary cmd structrue
OPPS 67
opps seg 798 b

我希望返回的结果如下所示(注意删除了第二个“法律命令”):

LEGAL COMMAND
----cmd a, b and sometimes c
----secondary cmd structrue
OPPS 67
----opps seg 798 b

我知道我必须遍历数组,但我真的很苦恼……任何帮助都将不胜感激!

感谢您的帮助!

编辑(12 月 6 日) 这是最终的工作脚本:

$result = mysql_query($query) or die(mysql_error());
        $res = array();
        while ($rows = mysql_fetch_array($result))
        { 
            //echo $rows['ASGMT_Name'];
            if (!array_key_exists($rows['ASGMT_Name'], $res))
            {
                $res[$rows['ASGMT_Name']] = array();
            }

            //for some reason this didn't work?
            //$values = $res[$rows['ASGMT_Name']];

            $var = $rows['Long_Name'];
            array_push($res[$rows['ASGMT_Name']],$var);

        }
                    print_r($res);

我想在 $res 数组的开头再添加 2 个级别,即:

名称 -> 分支 -> ASGMT_Name -> Long_Name

我试过了,但它不起作用,'LEGAL COMMAND'需要是它之前的数组的索引......:

$result = mysql_query($query) or die(mysql_error());
        $res = array();
        while ($rows = mysql_fetch_array($result))

        {   //print_r($rows);
            //echo $rows['ASGMT_Name'];

            $res[$rows['name']] = array($rows['branch'] => array());
                //$var = $rows['branch'];
                //array_push($res[$rows['name']],$var);

            if (!array_key_exists($rows['ASGMT_Name'], $res))
            {
                $res[$rows['ASGMT_Name']] = array();
            }

            $var = $rows['Long_Name'];
            array_push($res[$rows['ASGMT_Name']],$var);

        }
        print_r($res);

这是上面的输出:

Array ( [name] => Array ( [branch] => Array ( ) )[LEGAL COMMAND] => 
Array ( [0] => cmd a, b and sometimes c [1] => cmd a, b and sometimes c)

有什么帮助吗?

再次感谢!

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    你需要类似的东西

    $res = array();
    while ($rows = mysql_fetch_array($result))
    {
      if (!array_key_exists($res, $rows['ASGMT_Name']))
      {
          $res[$rows['ASGMT_Name']] = array();
      }
      $values = $res[$rows['ASGMT_Name']];
      array_push($values,$rows['Long_Name'];)     
    }
    

    现在您在$res 中有分层数据。

    【讨论】:

    • 应该是array_push($res, $values, $rows['Long_Name']); ?
    • 不,如果我理解你的话。应该是答案中的样子。同样,除非我误解了这个问题......
    • 嗯,不管我做什么,我都能访问$res中的key,但是value是另一个数组。 foreach($res as $mname => $name) {echo $mname; if(is_array($name) { foreach($name as $ikey => $ivalue) { echo $ikey; echo $ivalue;}}} $mname 打印效果很好,但我无法为 $name 打印任何内容数组?
    • 由于某种原因,存储在 $res[key] 的“值”中的 array() 没有被填充。我改成...
    • $var = $rows['Long_Name']; array_push($res[$rows['ASGMT_Name']],$var);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多