[英]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.