اذهب إلى المحتوى
  • 0

الاستعلام الصحيح عن السجلات المتشابهة في MySQL

Flutter Dev

السؤال

لدي الجدول التالي وهو يحتوي على البيانات المدرجه :

conversations table : 

--------------------------------------------------------------
id |topic_id   | user_send_id |  user_Received_id| topic
---------------------------------------------------------------
1  |    325     |   1          | 2                | مرحبا لدى عدة اسئله على هذا الموضوع
---------------------------------------------------------------
2  |    325     |   1          | 2                | مرحبا اخى الكريم هل لديك وقت كافى  
  ---------------------------------------------------------------
3  |    325     |   2          | 1                | هل نستطيع التحدث في وقت مختلف
---------------------------------------------------------------
4  |    325     |   2          | 1                |   انا مشغول الان  

قمت بوضع كود الاستعلام عنه بحيث انني ارغب بجلب كل السجلات المتعلقه ب Topic_id  المتشابه التي حدثة بين المستخدم المرسل والمستقبل من خلال الكود التالي:

<?php


include 'con.php';


 	 $topic_id= $_GET["topic_id"];
 $user_Received_id=$_GET["user_Received_id"];
  $user_send_id=$_GET["user_send_id"];
$sql = "SELECT  * FROM conversations WHERE topic_id=? AND user_Received_id=? AND user_send_id=? ";

$stmt = $con->prepare($sql); 

$stmt->bind_param("sss",$topic_id,$user_Received_id,$user_send_id);

$stmt->execute();

$result = $stmt->get_result();

 
//$result = $con->query($sql);
 
if ($result) {
 
 
	 while($row[] = $result->fetch_assoc()) {
	 
	 $item = $row;
	 
	 $json = json_encode($item, JSON_NUMERIC_CHECK);
	 
	 }
 
} else {
  
   echo "No Data Found.";
}
 echo $json;
$con->close();

?>

اللكود بشكل هذا شغال ولكن المشكله يرجع لي بقيمة عمود واحد عمود user_send_id وانا محتاج ارجاع قيمة user_send_idو user_Received_id المتشابه مع نفس topic_id بمعنى كل الحقول التي قام المستخدمين الاثنين بتخزينهم ويمتلكون topic_id واحد ليس مختلف 

كيف يمكن عمل ذلك بطريقة الصحيحه ما هو الخطاء في الكود اعلاه لدي ياليت من لديه فكره يفيدنا جزاكم الله الف خير

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1
بتاريخ 7 ساعات قال مروان مروان3:

مرحبا اخي @يوسف احمد9 اعتذر على تاخر الرد في البداية 

قمت بتجربة ووضع سينل كوت الكود يعمل بشكل هذا فعلا ولكن   الان هو يرجع بيانات المستخدمين فعلا ولكن ياتي ايضا ب مواضيع ليست مرتبطه ب  topic_ id 

 شاهد اخي هذا صور مرفقه فيها بيانات الجدول  والبيانات التي ييرجعها عن طريق الاستعلام وارفقت لك ملف الكود المستعمل + الجدول المستعمل mysql file

البيانات التي يرجعها الاستعلام الان توجد بيانات ليست مرتبطه بالموضوع 

607efcc43c76e_Screenshot2021-04-20200549.thumb.png.8fea71985fea1107c13e83d71cbfa179.png

 

كل البيانات المتوفره في الجدول الان 

607efcf59cca6_Screenshot2021-04-20200739.thumb.png.ede3760418f3f5f0b4a2e9213e783753.png

 

وهذا الكود المستعمل كامل للستعلام اعلاه


<?php


include 'con.php';
$topic_id= 200;
 $user_Received_id='wkFldN4TzDhczkdHMotQ';
 $user_send_id='xQVZw68SDee5ITSN2V';
 
$sql = "SELECT * FROM conversation WHERE (user_Received_id='$user_Received_id' AND user_send_id='$user_send_id') or(user_Received_id='$user_send_id' AND user_send_id='$user_Received_id') and topic_id = $topic_id";


$stmt = $con->prepare($sql); 

//$stmt->bind_param("sss",$IDAd,$IDUserReceived,$IDUuserSend);

$stmt->execute();

$result = $stmt->get_result();

 
//$result = $con->query($sql);
 
if ($result) {
 
 
	 while($row[] = $result->fetch_assoc()) {
	 
	 $item = $row;
	 
	 $json = json_encode($item, JSON_NUMERIC_CHECK);
	 
	 }
 
} else {
  
   echo "No Data Found.";
}
 echo $json;
$con->close();

?>

 

 

 

A.PHP

DB.txt

 

====================

 

مرحبا اخي بلال @بلال زيادة

تحيه طيبه لك

ملف المشروع يتكون من ملف php + mysql  قمت بارفاقه لك

 

ايضا هذا هو الكود السمتعمل للاستعلام


<?php


include 'con.php';
$topic_id= 200;
 $user_Received_id='wkFldN4TzDhczkdHMotQ';
 $user_send_id='xQVZw68SDee5ITSN2V';
 
$sql = "SELECT * FROM conversation WHERE (user_Received_id='$user_Received_id' AND user_send_id='$user_send_id') or(user_Received_id='$user_send_id' AND user_send_id='$user_Received_id') and topic_id = $topic_id";


$stmt = $con->prepare($sql); 

//$stmt->bind_param("sss",$IDAd,$IDUserReceived,$IDUuserSend);

$stmt->execute();

$result = $stmt->get_result();

 
//$result = $con->query($sql);
 
if ($result) {
 
 
	 while($row[] = $result->fetch_assoc()) {
	 
	 $item = $row;
	 
	 $json = json_encode($item, JSON_NUMERIC_CHECK);
	 
	 }
 
} else {
  
   echo "No Data Found.";
}
 echo $json;
$con->close();

?>

 

وهنا تكمن المشكله يقوم بارجاع بيانات ليست مرتبطه مع topic_id 

Screenshot 2021-04-20 200549.png

وهذا صوره للبيانات المتوفره في قاعدة البيانات

Screenshot 2021-04-20 200739.png

 

افدني اذا كانت لديك فكره عن سبب المشكله بارك الله فيك

A.PHP

DB.txt

جرب أخي أيضاً أن تضع ال topic id داخل سينجل كود هكذا : 

$sql = "SELECT * FROM conversation WHERE (user_Received_id='$user_Received_id' AND user_send_id='$user_send_id') or(user_Received_id='$user_send_id' AND user_send_id='$user_Received_id') and topic_id = '$topic_id'";

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

تلك الكويري ستقوم بإرجاع الداتا فقط من طريق واحد وهي فى حالة user_Received_id = 2 و user_send_id = 1

ولذلك يجب أن نعدل الكويري 

SELECT  * FROM conversations WHERE  (user_Received_id=1 AND user_send_id=2) or (user_Received_id=2 AND user_send_id=1) and topic_id = ?

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

لتفحص في المشكل أكثر يمكنك تفحص الخطأ عن طريق : 

<?php 

$binding_params = $stmt->bind_param("sss",$topic_id,$user_Received_id,$user_send_id);

if(! $binding_params){
    
  die( "يوجد خطأ في تمرير المتغيرات : (" .$conn->errno . ") " . $conn->error);

}

 

لكن يبدو أن السبب في ظهور المشكلة هو أن الدالة bind_param تقبل أن يكون البارمتر اﻷول عن نوع البيانات الممررة بالترتيب , فان كنا نقوم بتمرير 3 strings : 

<?php 

$stm->bind_param ('sss', $first_str ,$second_str ,$third_str)

أما في هاته الحالة فنحن نقوم بتمرير معرفات ID فالمفروض يتم تمرير i ترميزا لinteger عوضا عن تمرير s فيقوم بتجاهل كل ما هو ليس string فتكون : 

<?php 

$stm->bind_param ('iii', $first_int ,$second_int ,$third_int)

و لربما يكون السبب في ارجاع عمود واحد user_send_id هو أن هذا العمود مسجل بنوع string أو varchar و ليس id , فحتى تتجنب مشكل تحديد الuser_Received_id و الtopic_id فقط قم بتمرير iis عوضا عن iii فتكون : 

<?php 

$stm->bind_param ('iis', $first_int ,$second_int ,$im_a_string)

 

تم التعديل في بواسطة Adnane Kadri
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1
بتاريخ 10 دقائق مضت قال مروان مروان3:

هلا فيك اخي

شاكر لك ردك

حاولت التطبيق لما اعمل الكل iii d يرجع الى  كل السجلات المرتبطه ب رقم topic_id  بدون ان ينظر الى user_Received_id   user_send_id

وكانهم ليس من الجمله الشرطيه او ليسو موجودين

اهلا بك عزيزي

قمت بتطبيق واستبدال الارقام ب علامة ? 

 حتى يتم تنفيذ الشرط ولكن الكود لم يرجع لي اي قيمة لم يرجع بيانات 

طبعا قد يعتمد هذا على نوع البيانات المدرجة بقاعدة البيانات فالظاهر أن user_Received_id و  user_send_id عبارة عن strings او نوع اخر فتأكد أن تقوم بتمرير النوع الصحيح 

هل يمكن الاطلاع على بنية بيانات الجدول بالphpmyadmin ؟ 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "xmmp-chat";

// Create connection
$con = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($con->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT * FROM conversations WHERE (user_Received_id=1 AND user_send_id=2) or (user_Received_id=2 AND user_send_id=1) and topic_id = 325 ";

$stmt = $con->prepare($sql);

//$stmt->bind_param("sss",$topic_id,$user_Received_id,$user_send_id);

$stmt->execute();

$result = $stmt->get_result();


//$result = $con->query($sql);

if ($result) {
    $data = [];

    while ($row = $result->fetch_assoc()) {
        $data[] = $row;


    }
    echo "<pre>";
    print_r($data);
}
?>

أنظر أخى لهذا الكود وتلك الصورة لرؤية الناتج من هذا الكود

Capture.PNG

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "xmmp-chat";

$topic_id= 325;
$user_Received_id=1;
$user_send_id=2;

// Create connection
$con = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($con->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT * FROM conversations WHERE (user_Received_id=$user_Received_id AND user_send_id=$user_send_id) or (user_Received_id=$user_send_id AND user_send_id=$user_Received_id) and topic_id = $topic_id";

$stmt = $con->prepare($sql);

//$stmt->bind_param("sss",$topic_id,$user_Received_id,$user_send_id);

$stmt->execute();

$result = $stmt->get_result();


//$result = $con->query($sql);

if ($result) {
    $data = [];

    while ($row = $result->fetch_assoc()) {
        $data[] = $row;


    }
    echo "<pre>";
    print_r($data);
}
?>

جرب هذا الكود أخي

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

جرب أخي أن تضع سينجل كوت قبل المتغير هكذا وتأكد من القيم

$sql = "SELECT * FROM conversations WHERE (user_Received_id='$user_Received_id' AND user_send_id='$user_send_id') or (user_Received_id='$user_send_id' AND user_send_id='$user_Received_id') and topic_id = $topic_id";

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 10 دقائق مضت قال Adnane Kadri:

لتفحص في المشكل أكثر يمكنك تفحص الخطأ عن طريق : 


<?php 

$binding_params = $stmt->bind_param("sss",$topic_id,$user_Received_id,$user_send_id);

if(! $binding_params){
    
  die( "يوجد خطأ في تمرير البيانات : (" .$conn->errno . ") " . $conn->error);

}

 

لكن يبدو أن السبب في ظهور المشكلة هو أن الدالة bind_param تقبل أن يكون البارمتر اﻷول عن نوع البيانات الممررة بالترتيب , فان كنا نقوم بتمرير 3 strings : 


<?php 

$stm->bind_param ('sss', $first_str ,$second_str ,$third_str)

أما في هاته الحالة فنحن نقوم بتمرير معرفات ID فالمفروض يتم تمرير i ترميزا لinteger عوضا عن تمرير s فيقوم بتجاهل كل ما هو ليس string فتكون : 


<?php 

$stm->bind_param ('iii', $first_int ,$second_int ,$third_int)

 

هلا فيك اخي

شاكر لك ردك

حاولت التطبيق لما اعمل الكل iii d يرجع الى  كل السجلات المرتبطه ب رقم topic_id  بدون ان ينظر الى user_Received_id   user_send_id

وكانهم ليس من الجمله الشرطيه او ليسو موجودين

بتاريخ 21 دقائق مضت قال يوسف احمد9:

تلك الكويري ستقوم بإرجاع الداتا فقط من طريق واحد وهي فى حالة user_Received_id = 2 و user_send_id = 1

ولذلك يجب أن نعدل الكويري 


SELECT  * FROM conversations WHERE  (user_Received_id=1 AND user_send_id=2) or (user_Received_id=2 AND user_send_id=1) and topic_id = ?

 

اهلا بك عزيزي

قمت بتطبيق واستبدال الارقام ب علامة ? 

 حتى يتم تنفيذ الشرط ولكن الكود لم يرجع لي اي قيمة لم يرجع بيانات 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 14 دقائق مضت قال Adnane Kadri:

طبعا قد يعتمد هذا على نوع البيانات المدرجة بقاعدة البيانات فالظاهر أن user_Received_id و  user_send_id عبارة عن strings او نوع اخر فتأكد أن تقوم بتمرير النوع الصحيح 

هل يمكن الاطلاع على بنية بيانات الجدول بالphpmyadmin ؟ 

مرفق لك صوره اخي

607e05ca31e5c_Screenshot2021-04-20023523.thumb.png.d3386f84f291ccda710b5cbee2ad710d.png

بتاريخ 14 دقائق مضت قال Adnane Kadri:

طبعا قد يعتمد هذا على نوع البيانات المدرجة بقاعدة البيانات فالظاهر أن user_Received_id و  user_send_id عبارة عن strings او نوع اخر فتأكد أن تقوم بتمرير النوع الصحيح 

هل يمكن الاطلاع على بنية بيانات الجدول بالphpmyadmin ؟ 

مرفق لك اخي ايضا صورة للبيانات المدرجه فيه

607e07da822f5_Screenshot2021-04-20024009.thumb.png.29c1f7f072419c7091098cf93ae658b7.png

تم التعديل في بواسطة مروان مروان3
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 1 دقيقة مضت قال يوسف احمد9:

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "xmmp-chat";

// Create connection
$con = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($con->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT * FROM conversations WHERE (user_Received_id=1 AND user_send_id=2) or (user_Received_id=2 AND user_send_id=1) and topic_id = 325 ";

$stmt = $con->prepare($sql);

//$stmt->bind_param("sss",$topic_id,$user_Received_id,$user_send_id);

$stmt->execute();

$result = $stmt->get_result();


//$result = $con->query($sql);

if ($result) {
    $data = [];

    while ($row = $result->fetch_assoc()) {
        $data[] = $row;


    }
    echo "<pre>";
    print_r($data);
}
?>

أنظر أخى لهذا الكود وتلك الصورة لرؤية الناتج من هذا الكود

Capture.PNG

 

 

 اهلا اخي 

بنسبة الى id  المستخدمين انا احصل عليه من خارج الفورم يعني مش ثابت دائما على 1 او 2 مجرد مثال 

قمت بارفاق صور انظر هذا الجدول من قاعدة البيانات 

 

607e099688d80_Screenshot2021-04-20024009.thumb.png.c72d6275969d616474e6bdc991cdb76f.png

 

احصل عليهم من خلال 

 $topic_id= $_GET["topic_id"];
 $user_Received_id=$_GET["user_Received_id"];
  $user_send_id=$_GET["user_send_id"];

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 9 دقائق مضت قال يوسف احمد9:

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "xmmp-chat";

$topic_id= 325;
$user_Received_id=1;
$user_send_id=2;

// Create connection
$con = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($con->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT * FROM conversations WHERE (user_Received_id=$user_Received_id AND user_send_id=$user_send_id) or (user_Received_id=$user_send_id AND user_send_id=$user_Received_id) and topic_id = $topic_id";

$stmt = $con->prepare($sql);

//$stmt->bind_param("sss",$topic_id,$user_Received_id,$user_send_id);

$stmt->execute();

$result = $stmt->get_result();


//$result = $con->query($sql);

if ($result) {
    $data = [];

    while ($row = $result->fetch_assoc()) {
        $data[] = $row;


    }
    echo "<pre>";
    print_r($data);
}
?>

جرب هذا الكود أخي

قمت بتطبيقه بشكل التالي حسب بيانات الجدول الظاهر في الصوره ولم يرجع لي اي بيانات 

<?php
include 'con.php';
 
 $json = file_get_contents('php://input');
 $obj = json_decode($json,true);
 $topic_id= '200';
$user_Received_id='wkFldN4TzDhczk********';
$user_send_id='xQVZw68SDee5ITSN2V*******';

$sql = "SELECT * FROM conversation WHERE (user_Received_id=$user_Received_id AND user_send_id=$user_send_id) or (user_Received_id=$user_send_id AND user_send_id=$user_Received_id) and topic_id = $topic_id";

$stmt = $con->prepare($sql);

//$stmt->bind_param("sss",$topic_id,$user_Received_id,$user_send_id);

$stmt->execute();

$result = $stmt->get_result();


//$result = $con->query($sql);

if ($result) {
    $data = [];

    while ($row = $result->fetch_assoc()) {
        $data[] = $row;


    }
    echo "<pre>";
    print_r($data);
}
?>

 

 

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 17 ساعات قال يوسف احمد9:

جرب أخي أن تضع سينجل كوت قبل المتغير هكذا وتأكد من القيم


$sql = "SELECT * FROM conversations WHERE (user_Received_id='$user_Received_id' AND user_send_id='$user_send_id') or (user_Received_id='$user_send_id' AND user_send_id='$user_Received_id') and topic_id = $topic_id";

 

مرحبا اخي @يوسف احمد9 اعتذر على تاخر الرد في البداية 

قمت بتجربة ووضع سينل كوت الكود يعمل بشكل هذا فعلا ولكن   الان هو يرجع بيانات المستخدمين فعلا ولكن ياتي ايضا ب مواضيع ليست مرتبطه ب  topic_ id 

 شاهد اخي هذا صور مرفقه فيها بيانات الجدول  والبيانات التي ييرجعها عن طريق الاستعلام وارفقت لك ملف الكود المستعمل + الجدول المستعمل mysql file

البيانات التي يرجعها الاستعلام الان توجد بيانات ليست مرتبطه بالموضوع 

607efcc43c76e_Screenshot2021-04-20200549.thumb.png.8fea71985fea1107c13e83d71cbfa179.png

 

كل البيانات المتوفره في الجدول الان 

607efcf59cca6_Screenshot2021-04-20200739.thumb.png.ede3760418f3f5f0b4a2e9213e783753.png

 

وهذا الكود المستعمل كامل للستعلام اعلاه

<?php


include 'con.php';
$topic_id= 200;
 $user_Received_id='wkFldN4TzDhczkdHMotQ';
 $user_send_id='xQVZw68SDee5ITSN2V';
 
$sql = "SELECT * FROM conversation WHERE (user_Received_id='$user_Received_id' AND user_send_id='$user_send_id') or(user_Received_id='$user_send_id' AND user_send_id='$user_Received_id') and topic_id = $topic_id";


$stmt = $con->prepare($sql); 

//$stmt->bind_param("sss",$IDAd,$IDUserReceived,$IDUuserSend);

$stmt->execute();

$result = $stmt->get_result();

 
//$result = $con->query($sql);
 
if ($result) {
 
 
	 while($row[] = $result->fetch_assoc()) {
	 
	 $item = $row;
	 
	 $json = json_encode($item, JSON_NUMERIC_CHECK);
	 
	 }
 
} else {
  
   echo "No Data Found.";
}
 echo $json;
$con->close();

?>

 

 

 

A.PHP

DB.txt

 

====================

 

مرحبا اخي بلال @بلال زيادة

تحيه طيبه لك

ملف المشروع يتكون من ملف php + mysql  قمت بارفاقه لك

 

ايضا هذا هو الكود السمتعمل للاستعلام

<?php


include 'con.php';
$topic_id= 200;
 $user_Received_id='wkFldN4TzDhczkdHMotQ';
 $user_send_id='xQVZw68SDee5ITSN2V';
 
$sql = "SELECT * FROM conversation WHERE (user_Received_id='$user_Received_id' AND user_send_id='$user_send_id') or(user_Received_id='$user_send_id' AND user_send_id='$user_Received_id') and topic_id = $topic_id";


$stmt = $con->prepare($sql); 

//$stmt->bind_param("sss",$IDAd,$IDUserReceived,$IDUuserSend);

$stmt->execute();

$result = $stmt->get_result();

 
//$result = $con->query($sql);
 
if ($result) {
 
 
	 while($row[] = $result->fetch_assoc()) {
	 
	 $item = $row;
	 
	 $json = json_encode($item, JSON_NUMERIC_CHECK);
	 
	 }
 
} else {
  
   echo "No Data Found.";
}
 echo $json;
$con->close();

?>

 

وهنا تكمن المشكله يقوم بارجاع بيانات ليست مرتبطه مع topic_id 

Screenshot 2021-04-20 200549.png

وهذا صوره للبيانات المتوفره في قاعدة البيانات

Screenshot 2021-04-20 200739.png

 

افدني اذا كانت لديك فكره عن سبب المشكله بارك الله فيك

A.PHP

DB.txt

تم التعديل في بواسطة مروان مروان3
رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...