PHP查询停止LIKE停止记录重复?

时间:2014-09-10 12:40:38

标签: php mysql sql

我已经设置了一个带有"外观"的产品表。列,在此列中,它可以在多个范围内,例如" 1,6"在表格列中分隔的所有逗号。

我遇到的问题是,如果将范围添加到" 1,6,8"该范围似乎也显示在10和11中,我猜这是因为它包括" 1"在专栏中。

我的代码是:

$query_RSsec = "SELECT * FROM look WHERE seolink = '$_REQUEST[range]'";
$RSsec = mysql_query($query_RSsec, $swede) or die(mysql_error());
$row_RSsec = mysql_fetch_assoc($RSsec);
$totalRows_RSsec = mysql_num_rows($RSsec);

$query_RSrange = "SELECT ranges.*, ranges.name as rname, ranges.seolink as rseo, ranges.image as rimage, category.*, category.name as cname, category.seolink as cseo FROM (ranges LEFT JOIN category ON ranges.category = category.id) WHERE look LIKE '%$row_RSsec[id]%' ORDER BY ranges.name ASC";
$RSrange = mysql_query($query_RSrange, $swede) or die(mysql_error());
$row_RSrange = mysql_fetch_assoc($RSrange);
$totalRows_RSrange = mysql_num_rows($RSrange);
$use = 'yes';

然后返回这些我有以下代码:

<?php do {
          if (strlen($row_RSrange['rname']) > 10) {
                  $name = substr(str_replace('&','&amp;',$row_RSrange['rname']),0,10) . '...';
          } else {
              $name = str_replace('&','&amp;',$row_RSrange['rname']); 
          }
          ?>

<li><a title="<?php echo str_replace('&','&amp;',$row_RSrange['rname']); ?>" href="/products/<?php echo $row_RSrange['cseo']; ?>/<?php echo $row_RSrange['rseo']; ?>"><img src="/prod-images/category/<?php echo $row_RSrange['rimage']; ?>" alt="<?php echo str_replace('&','&amp;',$row_RSrange['rname']); ?>" title="<?php echo str_replace('&','&amp;',$row_RSrange['rname']); ?>" width="127" height="127" /><br />
        <?php echo $name; ?></a></li>
        <?php } while ($row_RSrange = mysql_fetch_assoc($RSrange)); ?>

2 个答案:

答案 0 :(得分:2)

WHERE FIND_IN_SET('$row_RSsec[id]',look) <> 0

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in-set


只是为了好玩,这是使用MySQLi的整个代码:

$swede = new mysqli('localhost', 'my_user', 'my_password', 'my_db');

try {
    $RSsec = $swede->query( "
                            SELECT id FROM look 
                            WHERE seolink = '{$_REQUEST['range']}'
                            ");
} catch (mysqli_sql_exception $e) { 
    echo $e->message;
}

$RSsecTotalRows = $RSsec->num_rows;

foreach($RSsec as $id => $RSsecID) {
    try 
    {
        $RSrange = $swede->query( "
        SELECT 
            ranges.*, ranges.name AS rname, ranges.seolink AS rseo, 
            ranges.image AS rimage, 
            category.*, category.name AS cname, category.seolink AS cseo 
        FROM ranges 
        LEFT JOIN category ON ranges.category = category.id 
        WHERE FIND_IN_SET('$RSsecID',look) <> 0
        ORDER BY ranges.name ASC
        ");

        $RSrangeTotalRows = $RSrange->num_rows;

        foreach($RSrange as $RSrangeRow) {
            $name = htmlspecialchars($RSrangeRow['rname']);
            $name = (strlen($name) > 10 ) ? substr_replace($name,"...",10) : $name;
            $href_url = "/products/{$RSrangeRow['cseo']}/{$RSrangeRow['rseo']}";
            $img_url = "/prod-images/category/{$row_RSrange['rimage']}";
?>

<li>
    <a title="<? echo $name; ?>" 
        href="<? echo $href_url; ?>">
        <img src="<? echo $img_url; ?>" 
        alt="<? echo $name; ?>" 
        title="<? echo $name; ?>" 
        width="127" height="127" />
        <br />
        <? echo $name; ?>
    </a>
</li>

<?          
        }
    } catch (mysqli_sql_exception $e) { 
        echo $e->message;
    }
}

答案 1 :(得分:1)

你发现&#39; 1&#39;在&#39; 1,2,10&#39;中两次。但你发现&#39;,1,&#39;只有一次在&#39; 1,2,10,&#39;。这就是说,使用concat添加逗号:

WHERE concat(',',look,',') LIKE '%,$row_RSsec[id],%'