0

有没有办法从数据库中选择具有某些数据的条目?我在数据库中有很多电子邮件地址,但我只想从一个域中选择。甚至可能吗?

4

4 回答 4

6

当然 - 只需使用LIKE运算符。

SELECT email FROM Persons
WHERE email LIKE '%gmail.com'
于 2013-01-25T08:16:54.630 回答
2

不建议您进行通配符搜索。
这是因为 mysql 无法使用索引来固定选择查询。
特别是您提到数据库中有很多电子邮件。

或者,您可以使用附加字段,hostname仅存储主机名。
当然,还要为它建立一个索引。

如果您需要使用 搜索电子邮件gmail.com
则可以进行直接字符串比较

SELECT email FROM Persons
WHERE hostname='gmail.com';

由于直接字符串比较是 mysql 索引的好搭档,因此您的查询将得到优化。

于 2013-01-25T08:24:53.297 回答
1

正如ajreal 指出的那样,在一般情况下,MySQL 不能使用索引来优化 LIKE 查询。然而,在尾随通配符的特定情况下,其中 only%位于模式的最后(实际上是“开始于”查询),优化器可以很好地使用索引加速查询。

因此,如果您要添加一个额外的索引列来存储电子邮件地址,您可以有效地查询

SELECT email FROM xyz WHERE reverse_email LIKE 'moc.liamg@%`

查找所有 gmail 地址,或LIKE 'ku.%英国域下的所有地址等。您可以让数据库使用触发器为您保持此列的最新状态,因此它不会影响您现有的更新代码

CREATE TRIGGER emailinsert BEFORE INSERT ON xyz
FOR EACH ROW SET NEW.reverse_email = REVERSE(NEW.email);

CREATE TRIGGER emailupdate BEFORE UPDATE ON xyz
FOR EACH ROW SET NEW.reverse_email = REVERSE(NEW.email);
于 2013-01-25T09:05:40.720 回答
0

你需要使用LIKE MYSQL CLAUSE

SELECT * FROM email_table WHERE email LIKE "%gmail.com"
于 2013-01-25T08:16:06.187 回答