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

これらを分割する必要がある理由は、オファーを実際に表示するページが、ユーザーの国がオファーの国と一致するかどうかを確認するためです。長い文字列全体として読み取ると、明らかに一致しなくなります。つまり、これらのオファーはユーザーには表示されません。

私は私の友人と話をしました、そして彼は使うと言いました、しかし私はあなたがSQLクエリでexplode()使うことができないとかなり確信しています。explode()

私はおそらくこれを説明できなかったと思います。私はこのプロジェクトに一晩中取り組んでいるので、少し疲れています。

また、メモとして、異なる国に提供するオファーごとに複数の行がある場所にたどり着くことができることを知っていますが、これらのオファーの一部では、すべての国がそれらを実行できます。つまり、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 に答える