PHP mysql_fetch_数组/行未显示唯一元素

PHP mysql_fetch_数组/行未显示唯一元素,php,mysql,Php,Mysql,我正在尝试创建一个基于php的搜索函数,代码如下: <?php $d_name=$_POST['id']; //connect to the database $db=mysql_connect ("localhost", "root", "") or die ('I cannot connect to the database because: ' . mysql_error()); //-select the database to use $mydb=mysql_sele

我正在尝试创建一个基于php的搜索函数,代码如下:

<?php
$d_name=$_POST['id'];

//connect  to the database
$db=mysql_connect  ("localhost", "root",  "") or die ('I cannot connect to the database  because: ' . mysql_error());
//-select  the database to use
$mydb=mysql_select_db("pgr");
if(!$mydb)
    echo "db not selected";
//-query  the database table
$d_name=(int)$d_name;

$sql="SELECT * FROM omimentry WHERE OMIM_ID=$d_name";


//-run  the query against the mysql query function
$result=mysql_query($sql) or die(mysql_error());
$n=mysql_fetch_array($result);
//-create  while loop and loop through result set
if($n)
                {
                echo "<table border = 1 width=\"95%\" border=\"0\" cellpadding=\"2\" cellspacing=\"2\" class=\"text_black\">
                <tr class=\"yellow\">
                  <td width=\"10%\" align=\"center\" valign=\"middle\" class=\"text_black_bold\">OMIM_ID</td>
                  <td width=\"20%\" align=\"center\" valign=\"middle\" class=\"text_black_bold\">location(chromosome)</td>
                  <td width=\"30%\" align=\"center\" valign=\"middle\" class=\"text_black_bold\">phenotype</td>
                   <td width=\"20%\" align=\"center\" valign=\"middle\" class=\"text_black_bold\">MIMnumber</td>
                  <td width=\"20%\" align=\"center\" valign=\"middle\" class=\"text_black_bold\">Gene</td>
                  <td width=\"20%\" align=\"center\" valign=\"middle\" class=\"text_black_bold\">GeneMIMnumber</td>
                  <td width=\"20%\" align=\"center\" valign=\"middle\" class=\"text_black_bold\">geneid</td>
                  <td width=\"30%\" align=\"center\" valign=\"middle\" class=\"text_black_bold\">protein</td>

                </tr> ";

                    while($rows=mysql_fetch_row($result))
                    {
                    echo " 
                <tr class=\"text_black\" align=\"left\" valign=\"middle\">
                  <td width=\"10%\">$rows[1]</td>
                  <td width=\"20%\">$rows[2]</td>
                  <td width=\"30%\">$rows[3]</td>
                  <td width=\"10%\">$rows[4]</td>
                  <td width=\"20%\">$rows[5]</td>
                  <td width=\"20%\">$rows[6]</td>
                  <td width=\"20%\">$rows[7]</td>
                  <td width=\"30%\">$rows[8]</td>
                                  </tr>";


                }

                echo " </table> " ; 

            }

            else
                echo "Sorry Data Not Available";

?>
现在,给定2141作为查询,代码将在结果中显示第二个条目,而不是第一个条目,它也应该包括在内


如果2142是查询,则没有输出,理想情况下,可能的输出应该是OMIM_ID 2142所描述的行。

我不知道您的表中有什么内容,也不知道您所指的重复项是什么。因为你被糟蹋得太厉害了,我冒着被糟蹋的风险帮助你编写非常规代码。

关于使用折旧后的mysql的评论与您的代码没有任何关系,但他们只是不喜欢其他人来这里寻求解决方案,认为使用mysql是可以的。当你发布一个问题时,他们没有意识到你有多沮丧,他们是如何增加你的沮丧的。它们的意思很好,但在您的情况下,您更改了代码以适应它们,但您没有意识到这与解决方案无关。

注意:此解决方案使用折旧后的mysql,而不是较新的mysqli

这将消除重复项:

while ($row = mysql_fetch_array($results, MYSQL_NUM)) {
   $data[] = serialize(array($row[1],$row[2],$row[3],$row[4],$row[5]));
}
$data = array_unique($data);
要尝试保留第一个副本,请执行以下操作:

while ($row = mysql_fetch_array($results, MYSQL_NUM)) {
   $data[] = serialize(array($row[1],$row[2],$row[3],$row[4],$row[5]));
}
$data = array_reverse ($data);
$data = array_unique($data);
ksort($data); // puts them back in original order.

那么新的循环是:

foreach($data as $key => $value){
  $row = unserialize($value);  


}
还有其他方法可以使用它来消除某些DUP并排除其他DUP

$uniqueRows = serialize(array($row[1],$row[2]));  
$data[$uniqueRows] = array($row[3],$row[4],$row[5]);

请它们不再得到维护,而是在使用。学习,而不是使用,并考虑使用。@ JayBrChanar,将通过它,但我只是想知道什么是错误的这段代码。@ Siddharth:你的意思是,除了你使用的是一个弃用的扩展,你是依赖于MySQL的隐式回落到最后一个活动连接,你呼应标记(不做,认真)。你似乎忘记了数组是零索引的(
$rows[0]
是第一个元素),你很容易被注入?@EliasVanOotegem,我明白,我明白!!我对web和脚本语言不太感兴趣,特别是对PHP不太感兴趣,但我会尝试使用PHP PDO。我不打算以那种方式被打xD。哦,至于索引,我忘了提到还有一个元素对于结果来说是不必要的,所以我从1开始。我将投票支持唯一一个事实,那就是你认真对待@JayBlanchard的评论并彻底修改了你的整个代码。干得好啊,我的同情。我的意思是,我用OMIM_ID搜索,假设OMIM_ID包含两个值相同的条目,12345。现在,我的代码将显示包含12345的第二行,而不是第一行。另一种情况是,如果OMID_ID xyz是唯一的并且出现在一行中,则根本没有输出。我更新了我的答案以颠倒数组顺序。我不确定它是否会有帮助。谢谢,我会尝试给出的建议,尽管我认为这不会有多大帮助。也许这与获取结果的方式有关。脱离主题的开始对于原始问题中的上述评论,我不认为暗示一个更新的标准是对所问查询的解决方案,而不是实际帮助查询背后的理由。我认为对于一个简单数学运算的问题,建议C++ 14标准是不公平的。结束离题的事情就像我说的我不完全理解你的问题。array_reverse出现了什么问题?您是否有一个指向正在处理的工作的链接?如果我看到实际结果,然后你可以在结果中指出问题,这可能会有所帮助。
while ($row = mysql_fetch_array($results, MYSQL_NUM)) {
  $columns = serialize(array($row[1],$row[2],$row[3],$row[4],$row[5]));
  if (!in_array($columns,$data)){
     $data[] = serialize(array($row[1],$row[2],$row[3],$row[4],$row[5]));
   }
}
foreach($data as $key => $value){
  $row = unserialize($value);  


}
$uniqueRows = serialize(array($row[1],$row[2]));  
$data[$uniqueRows] = array($row[3],$row[4],$row[5]);