这是一件简单的事情,但我不明白
我在DB中有两个表 日期和新闻邮件 在日期我有一些列ID,姓名,地址,电子邮件等 在newsmail中我有2个字段ID,邮件
我需要从日期中提取所有记录,其中包含来自newsmail的电子邮件地址
我试过了:
SELECT * FROM date WHERE date.email IN (SELECT mail FROM newsmail);
我从newsmail的最后一行收到的日期只有一条记录 还
SELECT * FROM date d JOIN newsmail n ON d.email LIKE n.mail
与上述相同的结果......
电子邮件和邮件字段为VARCHAR(50)
http://sqlfiddle.com/#!2/fad06/1/0 这里有效,但不是真正的数据库
问题在于从txt文件
向newsmail插入数据INITIAL:
$tmpfisier = $_FILES["upfile"]["tmp_name"];
$file_handle = fopen($tmpfisier, "r");
while(!feof($file_handle)){
$email_line = fgets($file_handle);
$values = mysql_query("INSERT INTO newsmail (`ID` ,`mail`) VALUES ( NULL , '$email_line')");
}
fclose($file_handle);
已编辑:
$tmpfisier = $_FILES["upfile"]["tmp_name"];
$file_handle = fopen($tmpfisier, "r");
while(!feof($file_handle)){
$raw_email_line = fgets($file_handle);
$email_line = preg_replace('/\s\v/u', '', $raw_email_line);
$values = mysql_query("INSERT INTO newsmail (`ID` ,`mail`) VALUES ( NULL , '$email_line')");
}
fclose($file_handle);
所以问题是来自txt / csv文件的WHITESPACES
谢谢你们!
答案 0 :(得分:0)
SELECT a.*
FROM Date a
INNER JOIN NewsMail b
ON a.email LIKE CONCAT('%', b.mail, '%')
答案 1 :(得分:0)
使用此:
SELECT d.*
FROM date d
INNER JOIN newsmail n
ON n.mail = d.email;
答案 2 :(得分:0)
可能需要TRIM函数来删除前导和尾随空格。
SELECT * FROM date d LEFT JOIN newsmail n ON TRIM(d.email) = TRIM(n.mail)
对于SQLSERVER,您可能需要同时使用LTRIM和RTRIM来获得相同的结果。
SELECT * FROM date d LEFT JOIN newsmail n ON RTRIM(LTRIM(d.email)) = RTRIM(LTRIM(n.mail))