2012-02-12 135 views
0

我有以下功能:檢查兩個在一個查詢表

function login_check($email, $password) 
{ 
    $email  = mysql_real_escape_string($email); 
    $password = md5($password); 
    $login_query = mysql_query("SELECT COUNT(`id`) as `count`, `id` FROM `table_name` WHERE `email`='$email' AND `password`='$password'"); 

    return (mysql_result($login_query, 0) == 1) ? mysql_result($login_query, 0, 'id') : mysql_error(); 
} 

我想它來檢查,如果用戶登錄界面,在兩個不同的表是正確的,不僅之一,因爲我做了另一個表用戶誰已經通過我的網站驗證了他們的Twitter帳戶。

+1

如果密碼和電子郵件是兩個表中的一樣嗎?我在你的例子中看到你只使用一個表,一個電子郵件和一個密碼。 – 2012-02-12 01:31:37

+0

不,不應該.. – wadie 2012-02-12 10:54:48

回答

3

你會與具有「認證與Twitter」標誌一個表更好,但你可以像這樣同時檢查:

select exists(
    select 1 from table_name where email = '$email' and password = '$password' 
    union 
    select 1 from twitter_table where email = '$email' and password = '$password' 
) 

的MySQL會給你一(又名真)如果至少有一個表格有你要找的東西,並且如果兩個表格都沒有匹配,則爲零(也就是假)。

使用select exists(select 1...)伎倆也將低於計數作爲數據庫只需要找到一個匹配或檢查指標就知道有沒有匹配它從查詢返回以前更快。

+0

是的。有一張桌子會更好,但每張桌子都有不同的行。我怎麼能把它們放在一張桌子上? 謝謝。 – wadie 2012-02-12 01:06:09

+1

@wadie:另一張桌子是什麼樣的? – 2012-02-12 01:14:49

+0

帶有oauth行的那個是Twitter的表格。 http://imgit.me/i/5h4m4V5.png http://imgit.me/i/4K5w6U8.png 你覺得我可以再補充兩個額外行的第一個表? – wadie 2012-02-12 01:20:35

0

您可以創建兩個表的聯合視圖:

CREATE VIEW combined_accounts AS 
    (SELECT id, twitter_mail AS mail, password FROM twitter_accounts) 
    UNION 
    (SELECT id, mail, password FROM my_accounts);