0

PHP で単純な SQL クエリを作成しています。何らかの理由で、DISTINCT使用されている場合でも、次のように 2 回表示されます。

BC
BC
OH
OH
TX
TX

これが私のコードです:

<?php
$sql = "SELECT DISTINCT `title`,`extra_fields_search` FROM `blahblah_items` WHERE catid=336 ORDER BY `blahblah_items`.`extra_fields_search` ASC ";
$partnerlisting= mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_assoc($partnerlisting))
foreach($row as $cname => $cvalue){
echo '<li>'.substr($row[extra_fields_search], 0, 2).'</li><br>';
}
;

?>

それぞれ1つだけを印刷するようにするにはどうすればよいですか?

4

4 に答える 4

1
SELECT 
    `title`,
    `extra_fields_search` 
FROM 
    `blahblah_items` 
WHERE 
    catid=336 
GROUP BY 
    SUBSTRING(extra_fields_search,1,2) # here. group by first two characters of extra_fields_search
    # or just "GROUP BY extra_fields_search", depends what you need
ORDER BY 
    `blahblah_items`.`extra_fields_search` ASC

SELECT DISTINCT a,b FROM tableと同じように動作しますSELECT a,b FROM table GROUP BY a,b

ドキュメントに従ってください:

于 2013-01-21T17:51:43.370 に答える
0

試す:

SELECT `title`, group_concat(distinct `extra_fields_search`)
FROM `blahblah_items` 
WHERE catid=336 
Group BY `title`
ORDER BY 2
于 2013-01-21T17:57:40.153 に答える
0

これを試して

SELECT `title`,`extra_fields_search` 
FROM `blahblah_items` WHERE catid=336 
Group BY extra_fields_search
ORDER BY `blahblah_items`.`extra_fields_search` ASC

編集:コードでこれを試してください

    while($row = mysql_fetch_assoc($partnerlisting))
    $rows[] = $row;
    foreach($rows as $row){
    echo '<li>'.substr($row[extra_fields_search], 0, 2).'</li><br>';
    }
   ;
于 2013-01-21T17:54:36.503 に答える
0

一意の行が得られることを確認してください。一意の列値を取得できるかどうかは保証されません。あなたの場合、結果のすべてのフィールドを考慮すると、各行が少なくとも 1 つのフィールドで他の行と異なることがわかります。

だからあなたは決して得られない

Col1  Col2
A     B
A     B

しかし、あなたは得ることができます

Col1  Col2
A     B
A     C
于 2013-01-21T17:54:51.447 に答える