在 mysql 中拆分字符串


Splitting strings in 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 行,这会让我觉得我只是马虎!

如果有人能把我推向正确的方向,我将不胜感激!

谢谢,凯西

有点奇怪/糟糕的数据设计:名为country的列中的多个国家/地区。除此之外,你也许可以用FIND_IN_SET()做点什么。

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

性能方面..它不会很好,但我希望您可以使用良好的索引选择其他字段。

这样的事情可能会奏效:

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