好的,所以我查找了几种完成此操作的方法,但没有一种对我有用,让我为您提供一些详细信息,说明为什么我尝试的方法不起作用。
我已经尝试过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";