簡體   English   中英

使用PHP如何計算第二個mySQL結果中有多少項?

[英]Using PHP how can I count how many items of one mySQL result exists in the second?

使用PHP,我從mySQL表中選擇一些行,其中包含特定日期的列哈希。 所有這些行都是唯一的。 另外,從表二中我做同樣的事情,我得到了特定日期的列哈希,還是唯一的。

使用PHP,我如何知道在表2上找到了多少來自表1的哈希?

$first_visits=mysql_query("SELECT hash AS first_visit
FROM audience
WHERE DATE( TIMESTAMP ) =  '2016-03-28'");

$visits=mysql_query("SELECT DISTINCT (
hash
) AS visit
FROM behaviour
WHERE DATE( TIMESTAMP ) =  '2016-03-29'");

現在,我想將第一組與第二組進行比較,以找出第二組中有多少個使用USING PHP

我認為您必須獲取對array的查詢,並使用array_intersec(array1,array2)來獲得具有共同結果的數組。

試試這個查詢:

SELECT DISTINCT (hash) AS visit FROM behaviour WHERE DATE( TIMESTAMP ) = '2016-03-29' and hash in (SELECT hash AS first_visit FROM audience WHERE DATE( TIMESTAMP ) = '2016-03-28')

您可以使用hash列將兩個表連接在一起,從而通過單個SQL查詢來實現:

如果您只需要計數:

SELECT
    COUNT(DISTINCT v.`hash`) hashCount
FROM
    first_visit v
    INNER JOIN behaviour b ON v.`hash` = b.`hash`
WHERE
    DATE(v.`timestamp`) = '2016-03-28'
    AND DATE(b.`timestamp`) = '2016-03-29'

如果您需要精確的哈希字符串,請選擇它們:

SELECT
    DISTINCT v.`hash`
FROM
    first_visit v
    INNER JOIN behaviour b ON v.`hash` = b.`hash`
WHERE
    DATE(v.`timestamp`) = '2016-03-28'
    AND DATE(b.`timestamp`) = '2016-03-29'

使用PHP,只需獲取SQL結果。

但。 為了獲得更好的性能結果,我建議避免在WHERE子句中的列上使用DATE() ,而應使用BETWEEN ,即如下更改WHERE子句:

WHERE
    v.`timestamp` BETWEEN '2016-03-28 00:00:00' AND '2016-03-28 23:59:59'
    AND b.`timestamp` BETWEEN '2016-03-29 00:00:00' AND '2016-03-29 23:59:59'

這將允許您在兩個timestamp列上使用索引。

嘗試這個。 將第一個結果保存在first_visits_rows中,並在獲取第二個查詢時進行比較以查找匹配項

$first_visits = mysql_query("SELECT hash AS first_visit FROM audience  

WHERE DATE( TIMESTAMP ) =  '2016-03-28'");
$first_visits_rows = [];
while ($r = mysql_fetch_assoc($first_visits)) {
    $first_visits_rows[$r["hash"]] = $r["hash"];
}

$visits = mysql_query("SELECT DISTINCT (hash) AS visit FROM behaviour WHERE DATE( TIMESTAMP ) =  '2016-03-29'");
$matches = 0;
while ($r = mysql_fetch_assoc($visits)) {
    if (isset($first_visits_rows[$r["hash"]])) {
        $matches++;
    }
}
echo $matches;

或者您也可以使用mysql join直接獲取匹配項

$first_visits=mysql_query("SELECT count(hash) as matches from first_visit as f join behaviour as b on f.hash=b.hash");
$r = mysql_query($first_visits);
$matches = $r["matches"];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM