2016-03-31 23 views
0

PHP'yi kullanarak, mySQL tablosundan belirli bir gün için sütun karmalarını içeren bazı satırları seçin. Bütün bu satırlar eşsizdir. Ayrıca, iki tablodan da aynı şeyi yapıyorum, belirli bir gün için sütun karesini alıyorum, yine bir başka şey değil.PHP'yi Kullanma Bir saniyede kaç mySQL sonucunun kaç tane var olduğunu nasıl sayabilirim?

PHP'yi kullanarak, ikinci tablodaki tablodan kaç karma bulunduğunu nasıl bilebilirim?

$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'"); 

Şimdi ben bu deneyin ikinci KULLANARAK PHP

+0

yonun sadece bir sayım mı, yoksa karma dizeleri mi? – mitkosoft

+0

"PHP Kullanıyor" saf PHP çözümünü ister misiniz? Herkesin neden SQL'de cevap verdiğini merak ediyorum. –

cevap

0
Sen hash kolon kullanılarak her iki tablo katılarak tek bir SQL sorgusu ile bunu yapabilir

:

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' 
:

sadece bir sayı gerekiyorsa

Kesin özet dizelerine ihtiyacınız varsa, bunları seçin:

.
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'yi kullanarak SQL sonucunu getirmeniz yeterlidir.

Ancak. Daha iyi performans sonucu elde etmek için, ben WHERE yan tümcesinde bir sütun üzerinde DATE() kullanımını önlemek için öneririm, ama aşağıdaki gibi NEREDE maddelerini değiştirmek yerine yani BETWEEN kullanmak: Bu kullanmanızı sağlayacak

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 sütunlarında dizinler.

+0

Merhaba Bu çözüm ve değerli bilgileriniz için teşekkür ederiz. Şimdi test edeceğim. Tarih performansını bilmiyordum. Çünkü gerçekten çok büyük bir masaya sahip olduğum ve bu özel konuda bir performans sorunu. 'Use' kullanmalı mıyım yoksa' <= > = 'yerine kullanmalı mıyım? – villoui

+0

BETWEEN ve <=> ile ilgili olarak hemen hemen aynı, buradaki önemli nokta 'WHERE DATE (zaman damgası)' ' – mitkosoft

+0

'' çözümünü kullanmıyorum. Teşekkür ederim. Sadece lütfen bana 2 sent verin, performans açısından, 'IN' veya 'JOIN' ile çözümünüzü kullanmalı mıyım? – villoui

-1

var ne ilk birçoğu öğrenmek için ikinci grupla ilk grubu karşılaştırmak istiyorum. eşleşmeleri

$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; 

bulmak için karşılaştırma first_visits_rows içinde ve ikinci sorguyu alma üzerine ilk sonucu kaydetmek veya kullanım MySQL sana diziye Sorgularınızı getirmesi olduğunu düşünüyorum doğrudan eşleşir

$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"]; 
+0

Hayır. Karşılaştırmak için her bir tablodaki hashı seçiyorum – villoui

+0

Adam, ilk tablodan ikinci bire birleşik karma kayıtlarının sayısını arıyor ... – mitkosoft

+0

aah. Üzgünüm, kodumu değiştireceğim – LightNight

0

almak katılmak olso edebilirsiniz ve ortak sonuca sahip bir diziye sahip olmak için array_intersec (dizi1, dizi2) kullanın.

0

bu sorguyu deneyin:

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')

+0

olarak değiştirin. IN cümlesi (çok daha hızlı olan EXISTS yerine) alt sorgu ile birleştirildiğinde, MySQL'in bu alt soruyu gerçekleştirmesi gereken performansı çok fazla etkileyecektir. Büyük bir veri çıkışı durumunda, bu sorgu oldukça yavaş olacaktır. – mitkosoft

İlgili konular