0

好的,所以我已经查找了几种完成此操作的方法,但它们都不适合我,让我给你一些详细信息,说明为什么我尝试过的方法不起作用。

我已经尝试过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(),但我很确定你不能explode()在 sql 查询中使用。

我知道我可能没有尽可能地解释这一点,我整晚都在做这个项目,所以我有点累。

另外作为说明,我知道我可以做到每个报价都有多行提供不同国家/地区的位置,但是其中一些报价允许所有国家/地区都这样做,这意味着对于 1 报价我会喜欢243 行,这会让我觉得我只是马虎!

如果有人可以推动我朝着正确的方向前进,我将不胜感激!

谢谢,凯西

4

2 回答 2

3

有点奇怪/糟糕的数据设计:名为country. 除此之外,你也许可以用FIND_IN_SET().

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

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

于 2012-06-28T10:55:34.927 回答
1

这样的事情可能会奏效:

$sql = "SELECT * FROM offers WHERE type='$type' and country LIKE '%$membercountry%' LIMIT $start, $limit";
于 2012-06-28T10:49:47.583 回答