2016-09-16 4 views
6

मैं दिनांक द्वारा क्रमबद्ध आंतरिक जुड़ने के माध्यम से पंक्तियों का चयन करने के लिए निम्न SQL क्वेरी का उपयोग कर रहा हूं।चुनिंदा क्वेरी में दिनांक परिवर्तनों का पता लगाने के लिए

SELECT * 
FROM  clubnights 
INNER  JOIN club ON clubnights.club = club.club_ID 
WHERE  visibility = 0 
AND  date >= CURDATE() 
ORDER BY clubnights.date ASC 

तब मैं लूप के दौरान एक PHP के माध्यम से अपने एचटीएमएल में सभी डेटा लोड करता हूं।

मेरा उद्देश्य किसी दिए गए दिनांक के प्रत्येक अनुभाग के ऊपर एक HTML शीर्षलेख गूंजना है।

इसलिए मैं चयन क्वेरी के माध्यम से दिनांक में परिवर्तन का पता लगाने के दौरान (या तो PHP या SQL के माध्यम से) का पता लगाने के लिए देख रहा हूं। असल में, मैं अंतिम 'दिनांक' कॉलम को वर्तमान में तुलना करना चाहता हूं, और यदि वे मेल नहीं खाते हैं तो मैं PHP के माध्यम से कुछ गूंजूंगा।

एक उदाहरण का अनुसरण कर रहे पंक्तियों संभालने:

2016-09-16 - Row 1 // Detect 'change' here as it's the first row 

2016-09-16 - Row 2 

2016-09-16 - Row 3 

2016-09-16 - Row 4 

2016-09-16 - Row 5 

2016-09-17 - Row 6 // Detect change here as date has changed 

2016-09-17 - Row 7 

2016-09-17 - Row 8 

संपादित करें: मैं MySQL

उपयोग कर रहा हूँ
+0

कौन सा आरडीबीएमएस प्रयोग कर रहे हैं? –

+0

@GiorgosBetsos मैं MySQL का उपयोग कर रहा हूं। उसमें उल्लेख किया जाना चाहिए था। –

+0

आप किसी दिए गए दिनांक के भीतर कैसे ऑर्डर कर रहे हैं? –

उत्तर

2
SELECT *, 
     CASE WHEN @dd!=date THEN 1 ELSE 0 END as changed, 
     @dd:=date 
FROM  clubnights, (select @dd:=null) 
    INNER JOIN club ON clubnights.club = club.club_ID 
WHERE  visibility = 0 
AND  date >= CURDATE() 
ORDER BY clubnights.date ASC 

आप एक चर को परिभाषित करने और आज की तारीख

के साथ तुलना पंक्ति पंक्ति से इसे बदल सकते हैं
2

अच्छी तरह से, स्थानीय चर मुझे इसके लिए सहायक हो। निम्नलिखित तरीके का प्रयोग करें!

आप php पाश के साथ तालिका में डेटा प्रदर्शित कर रहे हैं * मैं यह सोचते हैं हूँ डेटाबेस से जुड़ा हुआ है निम्नलिखित कलन विधि

का उपयोग करें।

<?php 
    $date2 = sortotime("today"); 
$q = mysql_query("select your_date_column_name as dt from your_table_name"); 
while($obj = mysql_fetch_object($q)) 
{ 
$date1 = $obj->dt; 
if(strtotime($date1) != strtotime($date2)) 
{ echo "Row Changed"; echo"<br/>"; $date2 = $date1; } 

echo $date1; 

आशा है कि यह मदद करता है :)

+2

mysql _ *() फ़ंक्शन को साल पहले बहिष्कृत कर दिया गया है और php v7 के रूप में हटा दिया गया था। Pls इस एपीआई का उपयोग कर किसी भी समाधान का सुझाव नहीं है। – Shadow

+0

ठीक है। मैं भविष्य में इसका ख्याल रखूंगा। –

3

अगर मैं आपकी आवश्यकता को समझते हैं, तो एक ही तिथि को साझा करने के रिकॉर्ड के समूहों के लिए, सबसे छोटी club_ID साथ रिकॉर्ड उस समूह में पहले रिकार्ड है। नीचे दिए गए उत्तर में, मैं प्रत्येक दिनांक के लिए न्यूनतम club_ID खोजने के लिए एक सबक्वायरी का उपयोग करता हूं। फिर यह सबक्वायरी यह निर्धारित करने के लिए आपकी मूल क्वेरी में शामिल हो जाती है कि प्रत्येक तारीख के लिए पहला रिकॉर्ड कौन सा है।

SELECT clubnights.*, 
     club.*, 
     CASE WHEN t.club_ID IS NOT NULL THEN 'change' END AS date_changed 
FROM clubnights 
INNER JOIN club 
    ON clubnights.club = club.club_ID 
LEFT JOIN 
(
    SELECT MIN(club.club_ID) AS club_ID, 
      clubnights.date AS date 
    FROM clubnights 
    INNER JOIN club 
     ON clubnights.club = club.club_ID 
    GROUP BY clubnights.date 
) t 
    ON clubnights.date = t.date AND 
     club.club_ID = t.club_ID 

ध्यान दें कि मैं PHP प्रस्तुति परत में समस्या से निपटने के लिए इस समाधान पसंद करते हैं, क्योंकि MySQL कुशलता से डेटा हेरफेर करने के लिए डिजाइन किया गया था, पीएचपी बहुत कम तो।

1

आप mysql से डेटा तारीख आरोही द्वारा आदेश दिया चुन सकते हैं, तो उन्हें php कोड में तुलना, उदाहरण:

$servername = "localhost"; 
$username = "username"; 
$password = "password"; 
$dbname = "myDB"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$sql = "same as your query"; 
$result = $conn->query($sql); 
$previousDate = DateTime::createFromFormat('Y-m-d', '1990-01-01'); 
if ($result->num_rows > 0) { 
// output data of each row 
while($row = $result->fetch_assoc()) { 
$mysqlDate= date('Y-m-d', $row["date"]); 
    if($previousDate != $mysqlDate) 
    { 
    echo "two different dates"; 
    $previousDate = $mysqlDate; 
    } 

    } 
} else { 
echo "0 results"; 
} 
$conn->close(); 
संबंधित मुद्दे