2011-05-31 33 views
2

我有一个表中填充了一些地址,其中有一些连字符出现在字符串中。操纵字符串 - PHP或MySQL

有些是:

“独轮车RD”

其他人可能

“土豆CIR - 1到100”

我希望能够在第一次出现“ - ”之后取出所有内容(如果有的话),然后再输出字符串。

我不打算在任何地方使用连字符串 - 我应该操纵MySQL或PHP中的字符串。我想在PHP中做这样做会更好,但是在MySQL中做这件事的好处是在每次输出时都不必操纵字符串。你们有什么建议?

(我以后可能需要完整的字符串,所以我不一定要做更改数据库中的记录)

干杯

+4

你的最后一条语句排除在MySQL这样做的可能性,你已经知道如何做到这一点在PHP ......所以,关闭的问题呢? – Fosco 2011-05-31 23:54:34

+0

请参阅strpos(),substr()...如果连字符的strpos!== false,则返回字符串的substr从0到连字符的strpos,否则返回完整的字符串。 – Fosco 2011-05-31 23:58:56

+0

@Fosco检查我的帖子,再想一想。你会得到3条“很棒的评论”给你评论?这很好... :) – RRStoyanov 2011-06-01 00:22:20

回答

2

除非你想永久保存不同的“格式”在数据库中的字符串(地址组件?),我会在PHP中执行字符串更改,而不是在SQL查询中。

  1. 这听起来像这个问题实际上是关于一个MVC分离的“视图”的一部分,而不是与数据模型,存储,链接做一些事情,等
  2. 它往往更容易扩展PHP比扩展你的数据库。

我假设字符串不是那么大,SQL-> PHP之间发送较少的数据是一个问题。

编辑:RRStoyanov's solution是一种相反的一面,它使数据库服务器执行字符串操作。

2

我玩了一下,我有这个给你。

SELECT 
DataColumn, 
SUBSTRING_INDEX(DataColumn, '-', -1) AS Substringed 
FROM YourTable 

现在你有原始和substringed列。

下面是示例输出,如果你有在DataColumn的不止一个破折号,可能会出现

DataColumn|Substringed 
Quantity for pricing 1|Quantity for pricing 1 
Quantity for pricing 2|Quantity for pricing 2 
Quantity for pricing 3|Quantity for pricing 3 
Wheelbarrow rd|Wheelbarrow rd 
Potato cir - 1 through 100| 1 through 100 

的问题。你明白了,并且可以用它来演奏更好的曲调。

你可能想看看这里还有=>MySQL String Functions

1

我达里恩同意。除非与查询或视图模型相关,否则您应该操纵PHP层中的字符串。看看这个功能是否适合你的需求。

function handleAddress($address) { 
    return (!strpos($address, "-")) ? $address : substr($address, 0 ,strpos($address, "-")); 
    }