0

こんにちは、私はこの機能を持っています:

function mail_exists($email){
    global $db;
    $email = sanitize($email);
    $query = $db->query("SELECT Email FROM table1 WHERE Email= '$email' ");
    $check = $query->num_rows;
    $query2 = $db->query("SELECT Email FROM table2 WHERE Email= '$email' ");
    $check2 = $query->num_rows;
    return ($check > 0 || $check2 > 0) ? true : false;
}

まず、クエリを 1 つだけ使用して短縮する方法を知りたいのですが、2 つ目のクエリを使用すると機能しないのはなぜですか? 両方のテーブルの構造が異なります。table1 のフィールド email は no です。16 で、table2 ではフィールド番号 6 です。

どうもありがとう。

4

3 に答える 3

2

まず*here、最後の行で論理エラーを作成しました: $query->num_rows;should be:$query2->num_rows;の結果:

function mail_exists($email){
    global $db;
    $email = sanitize($email);
    $query = $db->query("SELECT Email FROM table1 WHERE Email= '$email' ");
    $check = $query->num_rows;
    $query2 = $db->query("SELECT Email FROM table2 WHERE Email= '$email' ");
    $check2 = $query2->num_rows; // *here
    return ($check > 0 || $check2 > 0) ? true : false;
}

次に、2 つの完全に異なるコンテキストを扱う場合は、2 つの異なるクエリを使用する必要があります。必要がないときは、クエリを結合しないでください。行を数えるだけの場合は、次のように簡単に実行できます。

function mail_exists($email){
    global $db;
    $email = sanitize($email);
    $query = $db->query("SELECT COUNT(*) FROM table1 WHERE Email= '$email' ");
    $query2 = $db->query("SELECT COUNT(*) FROM table2 WHERE Email= '$email' ");
    $count1 = $query->fetch_row();
    $count2 = $query2->fetch_row();
    return ($count1[0] || $count2[0]);
}

SQLCOUNT()関数は、行をカウントする最も効率的な方法を提供するためにあります。

于 2013-03-01T17:47:00.990 に答える
0

あなたは試すことができます:

SELECT t1.Email from table1 t1 inner join table2 t2 on t2.Email=t1.Email WHERE t1.Email = '$email'

その後:

return $query->num_rows > 0;

私は PHP の専門家ではないため、あなたのマイレージは異なる場合があります。

于 2013-03-01T17:43:03.647 に答える
0

canUNION ALLを使用して全体のカウントを返します。

SELECT Email
FROM (
   SELECT Email FROM table1 WHERE Email= '$email'
   UNION ALL
   SELECT Email FROM table2 WHERE Email= '$email') t

SELECT COUNT(Email)または、カウントを返すために使用できます。

于 2013-03-01T17:39:11.387 に答える