0
<?php
include('includes/connection.php');

$query = 'select a, c from b';
$result = mysql_query($query, $con);
$num_rows = mysql_num_rows($result);

if ($num_rows > 0)
{
    echo '<p>';
    while($row = mysql_fetch_array($result))
    {
         echo "{$row["a"]}";
    }
    echo '</p>';
}
?>

テーブル「b」の列「a」にこれらの値があります

Table b
-------
a     c
-     -
1     a
1     a1
1     a2
2     a
3     b
4     b

while ループで、返された行が重複しているかどうかを判断して破棄できるようにしたいと考えています。この場合、数字の 1 は 1 回だけ表示されるようにします。どうすればこれを行うことができますか?

4

2 に答える 2

2

db サーバーは、php 側で反復と検証を使用するのではなく、この種の操作を実行するように最適化されているため、SQL 側でこれを行う必要があります。SQL選択でDISTINCTを使用してください。

于 2012-11-01T03:35:36.173 に答える
0

あなたの場合、distinctが役立つとは思いません。その理由は、まったく同じ行を持つ要素でdistinctが機能するためですが、あなたの場合のように、列aが列cと一致しても、列cは一致しません。

a と c を区別すると、1 (列内) に対して 3 行が得られます。

やり過ぎかもしれませんが、これは私が思いついたものです

ループスルーa

  FOR x IN (SELECT a from table)

SELECT *   FROM (SELECT ROW_NUMBER () OVER (ORDER BY user_id) user_row_no, A.* FROM table A WHERE A.a=x.a )  


END LOOP;
于 2012-11-01T04:34:25.107 に答える