已知有三个变量:$A,$B,$C已知$A和$B的关系:
$a=>array(b1,b2,b3,b4,b5....) 
$b是一个集合,其中b1,b2,...bn是变量B的序号,$a对应$b的最大值的序号,如$a=>b2(b2序号对应的值最大)又知$B的序号和$C的关系$bn=>$c
($b的序列号对应的$c,其中$c是bn对应的名称,如b2=>123)请问怎么把这三个变量的关系放在一张表上?
$a  bn    $c
类似:
ad     3      123 这样?

解决方案 »

  1.   

    例子:var $a=>array(1,2,5,89,76,53);$b中的最大值可能和数组中的某一个值相匹配。2=>abc
    5=>biu
    89=>sas
    ...假如获得的$b最大值匹配89,结果就是:$a     89     sas
      

  2.   

    方法:
    找出 $b 中最大的键值,$b_max再从$a 中找出  $b_max,找出就返回。
      

  3.   

    由此可以分析出:
    a与b是一对多的关系,
    b与c是一对一的关系.
    放到一个表就是说,a要有冗余
    a, b, c
    a  2  abc
    a  5  biu
    a 89  sas取b的最大值
    select a,b,c from table order by b desc limit 0
    或者使用max函数配合子查询
      

  4.   

    我来翻译一下 lz来修正
    1 b是一个人员优先级表 至少有b_id,sort_num
    2 c是一个人员属性表 至少有有c_id,name
    3 a似乎是一个最高优先级表 至少有a_id他们关系如下
    1 c_id是b_id的外键  
    2 最大的b.sort_num所对应的b.b_id=a.a_id结合在一张表的话,那就是
    id(人员id),name(姓名),sort_num(优先级),flag(最高优先级flag)可以理解为当将某人选为最高优先者时,将其sort_num更新为规则上的最大值
      

  5.   

    额。看来我没有描述清楚。6#的思想最为接近。由此可以分析出:
    a与b是一对多的关系,
    b与c是一对一的关系.
    b的最大值是经过比较得出的。我最终的结果是找到:$a=>$b的最大值=>$b的最大值对应的$c然后将它们关系起来放在页面上(自制表,非数据库的table)。
      

  6.   

    还有一点我没说清楚:
    $a,$b放在一张database table1中,这里可求得$b的最大值另有关系$a=>array($b1,$b2,...,$bn),这里可求得$a=>$b_max$b的值和对应的$c放在另一张database table2中$b1=>$c1
    $b2=>$c2
    ......
    $bn=>$cn现在怎么通过table1的$b_max的值找到table2中对应的$bn(n=1,n=2,...),再将结果关联:
    $a=>$b的最大值=>$b的最大值对应的$c
      

  7.   

    你要描述清楚些我就已经在phpx回答掉了,哎
      

  8.   

    SELECT t1.a, max( t1.b) , c.c
    FROM `table1` t1
    LEFT JOIN table2 t2 ON t1.b = t2.b
    WHERE 1
    GROUP BY t1.a始终不太明白,不知道这个是不是?
      

  9.   


    $b_max不能够通过max()函数求出来,现在我已知$b_max,只要关联另一张表的$bn和$c就可以了。
      

  10.   

    然后把它们的关系求出来就好了。$a   $b_max_num   $b_max_num对应的$c
      

  11.   

    比如$a = array(1, 2, 9, 4);
       $b = array('a', 'c', 'd', 'e');
    将他们排序之后会变成$a = array(1, 2, 4, 9);
                      $b = array('a', 'c', 'd', 'e');
    循环将他们
    $arr = array();
    $num = count($a) > count($b)? count($a): count($b);
    $num_min = count($a) > count($b)? $b: $a;
    for($i = 0; $i < $num; $i++){
        if(isset($num_min[$i])){
            $arr[][$b[$i]] = $a[$i];
        }else{
            //$arr[][$i] = $a[$i];
        }
    }
    echo '<pre>';print_r($arr);
      

  12.   

    $b_max是一个字符串,我求得的其中最多‘1’项为$b_max.现在$b_max已经求得。
    $b_max通过数组$a=>array($b1,$b2,...,$bn),已求得$a和$b_max对应的$b_max_num的关系。
    例如:$a=>$b2.
    现在$b_max_num 和$c 放在另一张表中。关系:$b_max_num=>$c现在怎么把这些都关联起来?$a      $b_max_num   $b_max_num对应的$c
      

  13.   

    给你个例子看看,是不是你想要的结果
    $a = array(1, 2, 9, 4, 7);
    $b = array('a', 'c', 'd', 'e');sort($a);
    sort($b);$arr = array();
    $num = count($a) > count($b)? count($a): count($b);
    $num_min = count($a) > count($b)? $b: $a;
    for($i = 0; $i < $num; $i++){
        if(isset($num_min[$i])){
            $arr[][$b[$i]] = $a[$i];
        }else{
            //$arr[][$i] = $a[$i];//去掉注释看看
        }
    }
    echo '<pre>';print_r($arr);
      

  14.   

    楼主,你上下文中描述的都不一样,你到底有没有好好把问题说明白??首先要你自己说明白别人才能给你解答。
    按照你最初的说法,
    b本身可以建一个表table_1bn b_value
    1  22
    2  4
    3  89b序号与c对应关系表table_2
    bn c_value
    1  aaa
    2  xv
    3  fdaf那么你要得到的数据是
    a bn b_value  c_value
    3 3  89       fdaf至于你说的把这个关系放在一张表里,始终没明白你的意思,那么多php技术分不知道你怎么得的,描述都这么模糊。如果是得出结果的话,sql写法如下
    select a.bn, a.b_value, b.c_value from table_1 a inner join table_2 b on a.bn=b.bn order by a.b_value desc limit 1;
      

  15.   


    请看22#,
    $a对应数组$b_max_num    a=>array($b1,$b2,...,$bn).按你的理解最后得出的结论关系:$a   $bn    $bn对应的$c  这三项关系。
      

  16.   

    $b是一个集合,其中b1,b2,...bn是变量B的序号,$a对应$b的最大值的序号,如$a=>b2(b2序号对应的值最大)这话啥意思?$b = array(22,4,89);
    $b[2]最大,所以$a等于2。我是这么理解你这句话的。不知道是我理解错了,还是你说的问题
      

  17.   


    这样说吧:
    $a=>array(10,25,51,36,191);
    其中10,25,51,36,191这些代表$b_max_num。$b_max_num => $c10=>abc
    25=>bcd
    51=>ccc
    ...然后把这些项都关联起来:$a   $b_max_num    $ca    10            abc
    ab   25            bcd
    ....象这样的情况。
      

  18.   

    把条件换一下不就OK了吗?t1.b = t2.b and t1.b=$b_max
      

  19.   

    SELECT t1.a,t1.b,t2.c
    FROM `table1` t1
    LEFT JOIN table2 t2 ON t1.b = t2.b
    WHERE t1.b='$b_max_num'你最好将你所有的相关的数据结构都拿出来看看。
    你一点都没说明白,个人感觉,你也许想复杂了!
      

  20.   

    $b_max在数据库里是得不出来的,$b是个blob类型的字段。对这个字段处理,得到了$b_max_num.这步我已经实现,就不要去讨论了。
    现在是有关系:
    $a=>array $b_max_num
    例如:
    $a=>array(10,20,51,36)
    其中10,20,51,36代表的就是$b_max_num。现在主要是有个表:
    里面储存的信息是$b_max_num  $c
    每个$b_max_num有唯一的$c对应。我想要的关系是$a   $b_max_num  $b_max_num唯一对应的$c
      

  21.   

    就是$a,$b_max_num,$b_max_num唯一对应的$c 这三者之间的关系。前面两项关系已实现。
      

  22.   


    对两个表里的$b都处理得到$b_max_numWHERE t1.$b_max_num=t2.$b_max_num
      

  23.   

    算了。我还是把代码贴出来吧。<?php
    $bin2test_item = array(3=>array(),
     4=>array(),
     5=>array(),
     6=>array(),
       7=>array(),
       8=>array(1,2,7,9,10,11,24,25,26,44,45,47,54,55,56,57,58,59,60,61,27,62,63,64,65,68,69,70,71,74,76,77,
        79,85,86,87,88,89,91,92,90,147,148,149,150)
     );
    function foo($s, $t) {
    $p = split('\|', $s);
    do{
    //print_r($p);
    $n = array_search(max($p), $p);
    //if(@in_array($n, $t)) return $n;
    if(@in_array($n, $t) && max($p)!=0) return $n;
    unset($p[$n]);
    }while($p);
    return '-';
    }    for($i=0;$i<count($save);$i++)
        {
    ?>
    <tr class="cells" onmouseover="this.className='cells2'" onmouseout="this.className='cells'">
    <td width=30%>
    <?php
    echo trim($save[$i]);
    ?>
    </td>
    <td width=40%>
    <?php
    echo trim("Bin ".$resultsArray[$save[$i]]);
    ?>
    </td>
    <td width=30%>
    <?php
    foreach($arr3 as $bin => $binItem)
    {
    if ($bin == $resultsArray[$save[$i]] )
    echo foo($binItem, $bin2test_item[$bin]);
    }
    ?>
    其中‘foo($binItem, $bin2test_item[$bin])’相当于$b_max_num , '$resultsArray[$save[$i]]'相当于$a.现在有一张新的数据库表,里面的内容是$b_max_num,$c,两者一一对应。我是想问,如何把这三者联系起来,且一一对应。
      

  24.   


    $sql = "select * from(select bin,testitem from dutbin order by did desc)A
    union all
    select * from(select bin,testitem from dutbin_v58b_nt order by did desc)B
    union all
    select * from(select bin,testitem from dutbin_v58b_yz order by did desc)C
    union all
    select * from(select bin,testitem from dutbin_u68a_nt order by did desc)D
    union all
    select * from(select bin,testitem from dutbin_u68a_yy order by did desc)E";   
    $stmt = @OCIParse($con,$sql);   
    @OCIExecute($stmt,OCI_DEFAULT);   
    @OCIFetchInto($stmt,&$rows,OCI_RETURN_LOBS);
    //print_r($rows);
    //=================================================
    $row_bin = $rows[0];
    $row_testitem = $rows[1];
    $arr3 = explode(",", $row_testitem); 
      

  25.   

    把新表里的数据查出来放在foo里 用$n循环与表里的$b_max_num对比,只要相等就取出$c
      

  26.   

    我如何判断新表中的值和foo($binItem, $bin2test_item[$bin])相同?
      

  27.   

    图片如下:
    现在已知前三项和其关系。另外有张表,存了testitem的序号和对应的品名($c)。我现在要把数据放入对应的单元格中。
    代码如下:<?php
    $bin2test_item = array(3=>array(),
                           4=>array(),
                           5=>array(),
                           6=>array(),
                           7=>array(),                                                          8=>array(1,2,7,9,10,11,24,25,26,44,45,47,54,55,56,57,58,59,60,61,27,62,
    63,64,65,68,69,70,71,74,76,77,                                                                 79,85,86,87,88,89,91,92,90,147,148,149,150)
                                                 );
    function foo($s, $t) {
    $p = split('\|', $s);
    do{
    //print_r($p);
    $n = array_search(max($p), $p);
    //if(@in_array($n, $t)) return $n;
    if(@in_array($n, $t) && max($p)!=0) return $n;
    unset($p[$n]);
    }while($p);
    return '-';
    }    for($i=0;$i<count($save);$i++)
        {
    ?>
    <tr class="cells" onmouseover="this.className='cells2'" onmouseout="this.className='cells'">
    <td width=30%>
    <?php
    echo trim($save[$i]);
    ?>
    </td>
    <td width=40%>
    <?php
    echo trim("Bin ".$resultsArray[$save[$i]]);
    ?>
    </td>
    <td width=30%>
    <?php
    foreach($arr3 as $bin => $binItem)
    {
    if ($bin == $resultsArray[$save[$i]] )
    echo foo($binItem, $bin2test_item[$bin]);
    }
    ?>
    <td width=25%>
    <?php?>
    </td>
    <?php

    ?>    
      

  28.   


    <?php
    foreach($arr3 as $bin => $binItem)
    {
    if ($bin == $resultsArray[$save[$i]] )
        $x = foo($binItem, $bin2test_item[$bin]);
        foreach($arr4 as $key => $info){//$arr4是表中所有记录
            if($x==$info("binItem"))//不知道你的字段
            echo $info("info");
        }
    }
    ?>你试试看吧……
      

  29.   

    [code=PHP]
    $sql = "select testitem_no,testitem_info from testitem order by did desc";
    $result = oci_parse($con,$sql);
    oci_execute($result);
    $arr4 = oci_fetch_row($result);
    print_r($arr4);
    结果只有一行。数据库里查询出来不止一行。Array ( [0] => 99 [1] => abcabc ) 
      

  30.   

    请看看最新的图片和代码。其中图中Testitem那项为序号。
      

  31.   

    图片上哪是$a哪是$b??
    还有字段类型分别是什么??bn又是图片上的什么和什么根据什么得来的??都要说清楚。可能是我思维不够,我一直觉得一片混乱。
      

  32.   

    图中Bin是$a,TestItem是$b_max_num,他们的值和关系已经求得。
    另外有一张表,包含信息$b_max_num和$b_max_num一一对应的$c。现在要图中的$b_max_num的值和数据库表中$b_max_num的值相等时,取出$c的值。求$c的值放入图的表格中。
      

  33.   

    <tr class="cells" onmouseover="this.className='cells2'" onmouseout="this.className='cells'">
    <td width=30%>
    <?php
    echo trim($save[$i]);
    ?>
    </td>
    <td width=40%>
    <?php
    echo trim("Bin ".$resultsArray[$save[$i]]);
    ?>
    </td>
    <td width=30%>
    <?php
    foreach($arr3 as $bin => $binItem)
    {
    if ($bin == $resultsArray[$save[$i]] )
    echo foo($binItem, $bin2test_item[$bin]);
    }
    ?>
    <td width=25%>
    <?php
    //求$C值对应的代码
    ?>
    </td>
    <?php

    ?> 
      

  34.   

    结果只有一行。数据库里查询出来不止一行?
    看你的图上也只有一行啊 !  是不是foo($binItem, $bin2test_item[$bin])的值有问题
      

  35.   

    $sql = "select testitem_no,testitem_info from testitem order by did desc";查不来不止一行。怎么才显示一行?
      

  36.   

    foo($binItem, $bin2test_item[$bin])的值和你表中的序号不是一一对应的关系吗?
    难道你要显示所有的?那就把那个判断去掉。不知道你到底要什么……
      

  37.   

    "select c from table2 where b_max_num='$b_max_num';"不就行了吗??
    慢慢懂你的意思了,但你肯定搞复杂了。