在mysql中拆分字符串

时间:2012-06-28 10:47:07

标签: php mysql

好的,所以我已经找到了几种完成这项工作的方法,并且没有一种方法可以帮助我,让我给你一些细节,说明为什么我尝试的方法不起作用。

我已经尝试了SUBSTRING_INDEX,因为我们大多数人都知道它只根据字符串中的分隔符数“拆分”,并且它对所有行都不是相同的数量,所以这是不行,我也尝试了http://blog.fedecarg.com/2009/02/22/mysql-split-string-function/

中找到的方法

我再次相信它基于查询中的分隔符数量。

我已经搜索并搜索了一种方法来完成这项工作,而我却找不到让它运行的方法。我仍然是PHP的新手,所以这可能是一个简单的修复,我只是以某种方式忽略它,但我不确定。

这是我正在使用的内容;

这是sql查询

$sql = "SELECT * FROM offers WHERE type='$type' and country='$membercountry' LIMIT $start, $limit";
    $result = mysql_query($sql);

country是包含逗号分隔字符串的列。有些行只是US,而其他行有US,AU,CA,GB

我需要拆分它们的原因是因为实际显示商品的页面会检查用户国家/地区是否与商品国家/地区匹配,并且当它作为整个长字符串读取时显然不匹配,这意味着这些优惠不会出现在用户身上。

我和我的一个朋友聊过,他说要使用explode(),但我很确定你不能在SQL查询中使用explode()

我知道我可能没有解释过这个问题,我整晚都在做这个项目,所以我有点累了。

另外作为一个说明,我知道我可以把它带到每个提供多个行的地方供应不同的国家,但是这些提供中的一些允许所有国家都这样做,这意味着对于1个提议我会有243行,这会让我觉得我只是马虎!

如果有人能给我推进正确的方向,我将非常感激!

谢谢,凯西

2 个答案:

答案 0 :(得分:3)

奇怪/糟糕的数据设计:名为country的列中的多个国家/地区。除此之外,您可以使用FIND_IN_SET()执行某些操作。

mysql> SELECT * FROM offers WHERE FIND_IN_SET('CA', country);

表现明智..它不会很好但我希望你可以使用一个好的索引选择其他领域。

答案 1 :(得分:1)

这样的事情可能有用:

$sql = "SELECT * FROM offers WHERE type='$type' and country LIKE '%$membercountry%' LIMIT $start, $limit";