البرمجة

تحليل استعلام SQL لعرض إعلانات محددة: تحديد أسباب ظهور سجل واحد فقط

عند دراسة الاستعلام الذي وفرته، يظهر أن هناك مشكلة قد تكمن في سبب عدم ظهور أكثر من سجل واحد. يبدو أن الاستعلام يستخدم ترتيب عشوائي ORDER BY rand()، ولديه حد أقصى لعرض ثلاثة نتائج فقط LIMIT 0,3. يجب فحص عدة عناصر لفهم السبب وتحديده.

أولًا، يجب التحقق من أن هناك بالفعل عدة سجلات تستوفي شروط الاستعلام. يمكنك تنفيذ الاستعلام بدون فقرة LIMIT للتحقق من عدد النتائج التي تطابق الشروط.

php
$getAdsTest = mysql_query("SELECT * FROM advertises WHERE status='RUNNING' AND adult='0' AND (country LIKE '%$test%' OR country='ALL') AND (device LIKE '%$pabu%' OR device='ALL')"); $numRows = mysql_num_rows($getAdsTest);

إذا كان هناك أكثر من سجل واحد يستوفي الشروط، فيجب فحص الأسطر التي تحتوي على قيم مختلفة في الحقول التي تستخدم في ترتيب النتائج.

ثانيًا، قد يكون استخدام ORDER BY rand() هو السبب في عدم ظهور النتائج المتوقعة. يمكنك تجربة تغيير هذا الترتيب إلى شيء آخر، مثل ORDER BY id DESC (حسبما يفيد مجال الـid في جدول الإعلانات).

php
$getAds = mysql_query("SELECT * FROM advertises WHERE status='RUNNING' AND adult='0' AND (country LIKE '%$test%' OR country='ALL') AND (device LIKE '%$pabu%' OR device='ALL') ORDER BY id DESC LIMIT 0,3");

في النهاية، يُفضل التحول إلى استخدام استعلامات PDO أو mysqli بدلاً من mysql_query نظرًا لتحسين الأمان والأداء، وتجنب تحتيات MySQL المهجورة.

المزيد من المعلومات

عند تحليل استعلامك، يظهر أن لديك استعلام SQL يستخدم لاسترجاع الإعلانات من جدول “advertises”. ومن خلال الاستعلام، يتضح أنك تحاول استرجاع إعلانات فقط إذا كانت الحالة “RUNNING”، وإذا كانت غير إباحية “adult=’0′”، وفي دولة محددة أو جميع الدول “country LIKE ‘%$test%’ OR country=’ALL'”، ولها جهاز محدد أو جميع الأجهزة “device LIKE ‘%$pabu%’ OR device=’ALL'”، وأخيراً يتم ترتيب النتائج بشكل عشوائي باستخدام “ORDER BY rand()”، مع فرضية عرض ثلاثة نتائج فقط باستخدام “LIMIT 0,3”.

تظهر بعض النقاط التي يمكن أن تكون محتملة لسبب عدم ظهور أكثر من سجل:

  1. قلة البيانات المتوافقة: تأكد من أن هناك فعلاً عدة سجلات تستوفي شروط الاستعلام. قم بتشغيل الاستعلام بدون الجزء المتعلق بـ “LIMIT” للتحقق من عدد النتائج المطابقة.

  2. ترتيب النتائج: قد يؤدي استخدام “ORDER BY rand()” إلى نتائج غير متوقعة. جرب ترتيب النتائج بواسطة حقل ثابت مثل “id” بدلاً من ترتيب عشوائي للتحقق من النتائج.

  3. استخدام دوال قديمة: يتم تنصيب الدوال المتعلقة بـ “mysql_” في PHP، لكنها أصبحت قديمة وغير مُفضل استخدامها. يُفضل الانتقال إلى استخدام MySQLi أو PDO للحصول على أمان وأداء أفضل.

قم بتنفيذ الاستعلام بشكل فردي لاختبار كل جزء، وابحث عن رسائل الخطأ للتحقق من وجود أخطاء أخرى.

زر الذهاب إلى الأعلى