你可能应该先看看这个答案SQL Array Search(如何在数据库中存储这样的信息)。如果你仍然想使用逗号分隔列表,最好的方法可能是使用explode()、array_map() 和implode():
function generateLink( $tag){
$tag = htmlspecialchars( trim( $tag));
$str = "<a href=\"/tags/$tag\">$tag</a>";
}
$tags = explode( ',', $row['tags']);
$new_tags = array_map( 'generateLink', $tags);
echo implode( ', ', $new_tags);
// Of course you can chain it to:
echo implode( ', ', array_map( 'generateLink', explode( ',', $row['tags'])));
但是,如果您使用正确的数据库设计,您应该SELECT(显示一个产品):
SELECT tags.name
FROM tags_products
INNER JOIN tags ON tags_products.tag_id = tags.id
WHERE tags_products,product_id = ?
还有 php:
$q = $db->query( 'mentioned select');
$result = array();
while( $row = $q->fetch_assoc()){
$result[] = genereateLink( $row['name']);
}
如果要大量列出产品以提高性能,请将此选择与GROUP_CONCAT:
SELECT products.id, products.name, GROUP_CONCAT(tags.name ASC SEPARATOR ', ') AS tags
FROM products
LEFT JOIN tags_products ON tags_producsts.product_id = products.id
INNER JOIN tags ON tags_products.tag_id = tags.id
GROUP BY products.id
并在$row['tags'] 上应用第一个提到的代码:)