我已经设置了一个带有"外观"的产品表。列,在此列中,它可以在多个范围内,例如" 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('&','&',$row_RSrange['rname']),0,10) . '...';
} else {
$name = str_replace('&','&',$row_RSrange['rname']);
}
?>
<li><a title="<?php echo str_replace('&','&',$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('&','&',$row_RSrange['rname']); ?>" title="<?php echo str_replace('&','&',$row_RSrange['rname']); ?>" width="127" height="127" /><br />
<?php echo $name; ?></a></li>
<?php } while ($row_RSrange = mysql_fetch_assoc($RSrange)); ?>
答案 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],%'