6

私は次のものを持っています:

 SELECT * FROM users LEFT JOIN user_info ON users.id=user_info.user_id 
                WHERE 
                    ((user_info.tester != 1) OR (user_info.tester is null)) AND 
                    id in (SELECT explicituser_id FROM user_login WHERE (created < '2012-12-17' OR created >= date_add('2012-12-17', interval 1 day))) AND 
                    id IN (SELECT participte_id FROM roster WHERE roster_id IN (6)) 
                order by 
                    substring_index(users.name, ' ', -1)

ユーザーの姓で並べ替えようとしているだけです。

ただし、名で並べ替えることはできますが、姓はバグがあります。ユーザーが自分の名前を引用符で囲んでいる場合 (例: "Abigail Martinez")、並べ替えが正しく行われません。ユーザーが名前を 1 つだけ提供し、それがニックネーム (例: Juan) である場合も、正しくないものになります。中間のイニシャルがあります (つまり、Tiffany S Villa または Steve de la Makinov) 残念ながら、これはフルネーム (users.name) に対して 1 つの列しか使用しません。

どんな助けでも大歓迎です。ありがとう!

4

2 に答える 2

8

substring_index(TRIM(users.name), ' ', -1)追加TRIMすると、末尾のスペースが削除されます。その後、期待どおりに並べ替えが行われます。

于 2012-12-17T18:49:45.317 に答える
0

その場合は、すべての行を取得してから、mysql_real_escape_stringを試してみてください。引用符がないようにします。こんな感じになります。

 $row['new_name'] = mysql_real_escape_string($row['name']);

パフォーマンスが良いかどうかはよくわかりません。

これがお役に立てば幸いです

于 2012-12-17T18:03:28.123 に答える