سؤال في استعادة البيانات من MYSQL بدون تكرار بيانات
ساعد بالإجابة
"إن في قضاء حوائج الناس لذة لا يَعرفها إلا من جربها، فافعل الخير مهما استصغرته فإنك لا تدري أي حسنة تدخلك الجنة."
الإجابات (2)
وعليكم السلام ورحمة الله وبركاته
الحل بطريقة بناء البيانات داخل while loop يفضل بناء جميع البيانات داخل متغير على هيئة مصفوفة ثم بعد ذلك التعامل معها لطباعتها بالشكل السليم
انا قمت بإنشاء قاعدة بيانات بسيطة فيها نفس فكرة السؤال ثم قمت بالاتصال بقاعدة البيانات لجلب البيانات وبعدها رتبت البيانات داخل مصفوفة ثم قمت بطباعتها للمتصفح
هنا أوامر إنشاء قاعدة البيانات بجدولين questions و answers
-- Create syntax for TABLE 'answers'
CREATE TABLE `answers` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`answer` varchar(250) DEFAULT NULL,
`question_id` int(11) unsigned DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
-- Create syntax for TABLE 'questions'
CREATE TABLE `questions` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`question` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
بعدها قمت بإنشاء ملف يتصل بقاعدة البيانات ويجلب لي جميع الأسئلة وكل الإجابات المرتبطة ثم ترتيبها داخل مصفوفة بإسم data ليتم طباعتها للصفحة
<?php
//Create Connection
$mysqli = mysqli_connect("localhost", "root", "root", "3alampro-help");
// Check connection if there is error give it to me
if (!$mysqli) {
die("Connection failed: " . mysqli_connect_error());
}
//Make SQL
$sql = "SELECT q.id, q.question, a.answer FROM questions q LEFT JOIN answers a ON q.id = a.question_id";
//Query the database
$query = mysqli_query($mysqli, $sql);
//Fetch the Records and arrange them in new organized array
while($row = mysqli_fetch_assoc($query)){
$data[$row['id']]['question'] = $row['question'];
$data[$row['id']]['answer'][] = $row['answer'];
}
/* free query set */
mysqli_free_result($query);
/* close connection */
mysqli_close($mysqli);
echo "<pre>";
print_r($data);
الكود بالأعلى سيقوم بطباعة المصفوفة للمتصفح بهذا الشكل
Array
(
[1] => Array
(
[question] => question number 1 what is what?
[answer] => Array
(
[0] => yes
[1] => no
[2] => mmm
)
)
[2] => Array
(
[question] => the next question is ?
[answer] => Array
(
[0] => do my best
)
)
[3] => Array
(
[question] => is 3alampro.com nice?
[answer] => Array
(
[0] =>
)
)
)
بإمكانك إستخدام foreach لطباعة النتائج بشكل مرتب ومنسق لماتحتاجين فمثلا لو اردنا طباعة السابق كل سؤال بسطر وتحته إجاباته نقوم بإستبدال بالكود السابق
echo "<pre>";
print_r($data);
بهذا الكود
foreach ($data as $value) { echo $value['question'] . '<hr>'; foreach ($value['answer'] as $key => $val) { if(!empty($val)) { echo $key . ' ' . $val . '<br/>'; } else { echo 'no answer yet'; } } }
وهذا مجرد مثال فقط لطريقة عرض والتعامل مع البيانات بشكل مرتب
أنا بالمثال السابق إستخدمت دوال المكتبة mysqli وهي النسخة الأحدث من mysqlحيث تم الإستغناء عن هذه المكتبة بالإصدارات الحديثة ولن تعمل وتم إضافة الكثير من المميزات لمكتبة mysqli وهنا شرح كامل للمكتبة وطريقة عملها
وايضا لاحظت إستخدام NotePad لتصفح ملفات php انصحك باستخدام محرر نصوص متخصص بالبرمجة مثل SublimeText انا هنا وضعت قائمة بافضل المحررات
أتمنى تفيدك بعملك
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !