ComusThumbz Dépannage
- Aperçu général
- Liste de contrôle diagnostique rapide
- Erreurs de serveur & PHP
- Erreur de page blanche / 500 Serveur interne
- Erreur AdminLanguage Singleton
- Limite de mémoire épuisée
- Temps d'exécution maximum dépassé
- Erreurs de permission de fichier
- Questions relatives aux bases de données
- La connexion à la base de données a échoué
- Verrouillages de table et requêtes de blocage
- Enquêtes lentes
- Commandes de débogage SQL
- Traitement vidéo
- Vidéos bloquées à 'en attente'
- FFmpeg / FFprobe Non trouvé
- Erreurs de traitement vidéo
- Le flux HLS ne fonctionne pas
- Thumbnails non générateurs
- Défauts de chargement de CDN
- Problèmes de serveur de conversion distribué
- Problèmes liés à l'API
- Défauts d'authentification de l'API
- Appels API à défaut de JavaScript
- API retourne les données vides
- Erreurs de CORS
- Questions de première ligne
- Caractéristiques non affichées / Tous désactivés
- Traductions non chargées
- Styles CSS non appliqués
- Mode sombre ne fonctionne pas
- Lecteur vidéo ne charge pas
- Cliquez sur Suivi Ne fonctionne pas
- Mots clés SEO Meta
- Système Cam Performers
- Aucun interprète n'apparaît
- Tous les performeurs montrent hors ligne
- API externe 403 Interdit
- API externe 401 Non autorisée
- Page des interprètes de Cam lents
- Revenus d'affiliation manquants
- Diffusion en direct (LiveKit)
- Le serveur LiveKit ne démarre pas
- Flux non connecté
- Haute latence / Buffering
- Chat ne fonctionne pas
- Monétisation du Créateur
- Conseils non traités
- Gains non agrégés
- Les messages du créateur ne sont pas affichés
- Numéros d'abonnement
- Authentification et utilisateurs
- Connexion Fails
- Questions de séance
- 2Problèmes liés à l'EF
- Cron Emplois
- Vérification des emplois de Cron
- Calendrier requis
- Référence des outils de débogage
- Emplacements des fichiers journaux
- Corrections SQL communes
Aperçu général
Ce guide consolide les informations de dépannage pour l'ensemble de ComusThumbz CMS, couvrant à la fois le panneau d'administration du moteur (ct/admin/) et les pages publiques de couverture (racine du projet). Les questions sont organisées par catégorie avec des symptômes, des causes et des solutions.
Liste de contrôle diagnostique rapide
Exécuter ces vérifications en ordre lorsque vous rencontrez un problème :
- Journal des erreurs PHP - Vérification
ct/logs/et le journal des erreurs PHP de votre serveur pour les erreurs récentes - Cron emplois - Vérifier que les emplois de cron sont en cours d'exécution (la plupart des problèmes de "données non mises à jour")
- Autorisations de fichiers - Le serveur Web doit avoir accès à
uploads/,ct/logs/,ct/dat/ - Connexion à la base de données - Essai avec
https://yourdomain.com/tools/simpletest.php?key=comus2025 - API santé - Essai avec
https://yourdomain.com/ct/api/v1/features - Caractéristiques - Les caractéristiques handicapées sont la cause la plus fréquente de "page non montrée"
- Console du navigateur - Vérifier les erreurs JavaScript (F12 -> Console)
- Onglet réseau - Vérifier si les demandes d'API ont échoué (F12 -> Réseau)
Erreurs de serveur & PHP
Erreur de page blanche / 500 Serveur interne
Symptôme: Page affiche complètement vide ou renvoie HTTP 500 sans erreur visible.
Causes courantes:
declare(stricttypes=1)placement - Ca doit être la première ligne après. Tout espace blanc, caractère BOM ou code avant qu'il ne provoque une erreur fatale.
- Erreur de syntaxe PHP - Vérifiez le journal des erreurs :
- Fichier manquant inclus - A
requireoncepour un fichier qui n'existe pas :
- Afficher les erreurs désactivées - Permettre temporairement le débogage :
Solution: Vérifiez d'abord le journal des erreurs PHP. Si vide, activer displayerrors temporairement pour voir l'erreur réelle.
Erreur AdminLanguage Singleton
Symptôme:
Fatal error: Cannot instantiate AdminLanguage ou similaire 500 erreur sur les pages d'administration.
Cause: Utilisation new AdminLanguage() au lieu du modèle de singleton.
Correction :
// CORRECT
$lang = AdminLanguage::getInstance();
Limite de mémoire épuisée
Symptôme:
Fatal error: Allowed memory size of X bytes exhaustedDéclencheurs fréquents:
- Gros téléchargements de fichiers vidéo
- Traitement des grandes galeries d'images
- Opérations en vrac sur des enregistrements d'interprètes de came 400K+
Solution: Augmenter la limite de mémoire PHP & #160;:
Ou par écriture:
Temps d'exécution maximum dépassé
Symptôme:
Fatal error: Maximum execution time of 30 seconds exceededDéclencheurs fréquents:
- Emplois de cron de traitement vidéo
- Grandes requêtes de base de données
- Appels de l'API externe
Solution:
Pour les emplois de cron, défini illimitée:
Erreurs de permission de fichier
Symptôme:
Permission denied erreurs lors de l'écriture de fichiers ou de la création de répertoires.
Autorisations requises :
Correction :Questions relatives aux bases de données
La connexion à la base de données a échoué
Symptôme: Les pages échouent à charger, API renvoie 500 erreurs, "Se connecter refusé" dans les journaux.
Diagnostic:
- Tester avec l'outil de base de données rapide:
- Vérifier les pouvoirs
ct/dat/config.inc.php:
- Vérifiez que MySQL fonctionne :
Solution: Vérifier que le service MySQL fonctionne et que les identifiants correspondent à la configuration de la base de données.
Verrouillages de table et requêtes de blocage
Symptôme: API appelle timeout mais les requêtes de base de données directes sont rapides. Les pages s'accrochent pendant 30-60 secondes.
Diagnostic:
- Lancer l'outil d'état MySQL :
- Vérifier le blocage des requêtes & #160;:
- Utilisez l'inspecteur de verrouillage de base de données pour l'analyse de verrouillage InnoDB:
Solution:
- Tuer la requête de blocage :
- Ou via l'outil de débogage:
Cause commune: Les apicron.php marksiteperformersoffline() fonction de mise à jour de tous les interprètes à la fois. Ceci a été corrigé avec des mises à jour par lots (1000 lignes à la fois avec des pauses de 10ms).
Enquêtes lentes
Symptôme: Les pages spécifiques se chargent lentement, en particulier les interprètes de came ou les listes vidéo.
Diagnostic:
-- Analyser les performances de la table
TABLEAU ANALYZE
ANALYZE TABLE tblVidéos;
-- Check index usage
SHOW INDEX FROM tblCamsPerformers;
SHOW INDEX FROM tblVideos;
Solution:
- Vérifier l'existence d'index sur les colonnes fréquemment sollicitées
- Utilisation
EXPLAINsur les requêtes lentes pour identifier les index manquants - Vérifiez si le cache APCu fonctionne (
php -m | grep apcu) - Pour les interprètes de came, utiliser
?fast=1pour sauter les requêtes COUNT
Commandes de débogage SQL
Référence rapide pour le débogage manuel de la base de données:
-- Tuer une requête spécifique
JUILLET 123;
-- Tuer toutes les connexions de sommeil plus de 30 secondes
SÉLECTIONNEZ CONCAT('KILL ', id, ';')
DE L'INFORMATIONschema.processlist
Où commande='Dormez' ET Temps > 30;
-- Vérifier les serrures de table
OBTENIR DES TABLEAUX OUVERTSutiliser > 0;
-- Check InnoDB status for deadlocks
SHOW ENGINE INNODB STATUS;
Traitement vidéo
Vidéos bloquées à 'en attente'
Symptôme: Vidéos téléchargées mais ne traitent jamais. Le statut reste 'en suspens' indéfiniment.
C'est le problème vidéo le plus commun. Vérifiez dans l'ordre :
- Cron emplois ne fonctionnent pas - Le processeur vidéo fonctionne selon un horaire :
- php /path/to/ct/admin/cron/ftpvidéoprocesseur.php
- Mauvais fichierformat de chemin dans la base de données - Le bug de données le plus courant:
Le chemin du fichier DOIT être : uploads/videos/original/{filename}
PAS juste le nom du fichier, et PAS y compris ct/ Préfixe.
- Correction des chemins de fichiers incorrects & #160;:
- Effacer la file de traitement bloquée :
- Vérifier que le fichier existe sur le disque :
FFmpeg / FFprobe Non trouvé
Symptôme: Le traitement vidéo échoue avec "FFmpeg not found" ou "FFprobe not found" dans les journaux.
Diagnostic:
Solution:
- Installer FFmpeg :
- Vérifier les chemins dans la configuration correspondent aux emplacements réels:
- S'assurer que PHP peut exécuter des commandes shell :
Erreurs de traitement vidéo
Symptôme: Les vidéos changent de statut d'erreur après une tentative de traitement.
Diagnostic:
- Vérifier les journaux de traitement :
- Vérifiez l'enregistrement vidéo :
Causes communes:
- Fichier source corrompu
- Codec non supporté
- Espace disque insuffisant
- Version FFmpeg trop ancienne (nécessite 4.0+)
Solution: Corriger la cause sous-jacente, puis réinitialiser la vidéo pour le retraitement :
Le flux HLS ne fonctionne pas
Symptôme: Le lecteur vidéo affiche une erreur ou revient à MP4. HLS
.m3u8 fichiers non chargés.
Diagnostic:
- Vérifiez si les fichiers HLS ont été générés :
- Vérifier que la liste de lecture principale est accessible :
- Check MIME type configuration. Your web server must serve
.m3u8asapplication/vnd.apple.mpegurl:
Solution: Verify HLS files exist on CDN, MIME types are correct, and securemedia.php token is valid.
Thumbnails Not Generating
Symptom: Videos process but have no poster image, preview, or timeline thumbnails.
Diagnosis:
Common causes:
- ImageMagick not installed (
convertcommand needed for contact sheets) - FFmpeg failed during thumbnail extraction
- CDN upload for thumbnails failed (check storage server logs)
Solution:
Reprocess thumbnails only
CDN Upload Failures
Symptom: Video processes locally but files don't appear on CDN storage server.
Diagnosis:
- Check storage server configuration:
- Check file location records:
- Verify CDN credentials and connectivity from the admin panel.
File sharding formula: floor(videoid / 1000) 1000
Example: Video ID 4321 goes to shard 4000:
Solution: Check CDN credentials, test connectivity, verify storage server group assignment.
Distributed Conversion Server Issues
Symptom: Videos not being assigned to remote conversion servers, or remote processing fails.
Diagnosis:
- Check server status:
- Check conversion logs:
- Verify settings:
Solution:
- Ensure
conversionuseremoteserversis set to1 - Verify remote server SSH/FTP connectivity
- Check that FFmpeg is installed on remote servers
- Verify
conversionfallbacktolocalis1for automatic fallback
API Issues
API Authentication Failures
Symptom: API returns 401 Unauthorized or "Invalid token" errors.
Common causes:
- Wrong user ID column -
tblCMSUsersusesid, NOTuserid:
-- WRONG (column doesn't exist)
SELECT userid FROM tblCMSUsers;
- Wrong status column -
tblCMSUsersusesaccountstatus, NOTstatus:
-- WRONG
WHERE status = 'active'
- JWT token expired - Tokens have an expiration time. Re-authenticate:
- JWT secret mismatch - Verify in config:
API Calls Failing from JavaScript
Symptom: Frontend pages can't load data. Browser console shows fetch errors.
Diagnosis:
- Check
ApiClientbase URL:
- Check Network tab (F12) for the failing request - note the URL, status code, and response body.
- Verify the endpoint exists in the router:
- File:
ct/api/v1/index.php - 90+ endpoints defined
- Check JWT token:
Solution: Verify base URL detection, check endpoint exists in router, verify authentication token if endpoint requires auth.
API Returns Empty Data
Symptom: API returns
{"success": true, "data": []} with no content.
Diagnosis:
- Check if data exists in the database:
- Check feature toggles - some API endpoints return empty when features are disabled.
- Check query parameters - pagination offset may be beyond available data.
Solution: Verify data exists in the database and feature toggles are enabled.
CORS Errors
Symptom: Browser console shows
Access-Control-Allow-Origin errors.
Cause: API and frontend on different domains or ports.
Solution: Ensure the API sets proper CORS headers:
Or in .htaccess:
Frontend Issues
Features Not Showing / All Disabled
Symptom: Pages redirect with "feature disabled" message, or navigation items are missing.
Diagnosis:
- Test the features API endpoint:
- Check feature cache - APCu may have stale data:
- Check
featurehelper.php- all features default to enabled if not found in database.
- Verify feature settings in admin panel: Admin Panel -> Feature Toggles
Solution: Clear APCu cache, verify feature settings in admin panel, check that the API is reachable.
Translations Not Loading
Symptom: Translation keys displayed instead of text (e.g.,
videos.title instead of "Videos").
Diagnosis:
- Verify
lang/en.jsonexists and is valid JSON:
- Check file permissions (must be readable by web server).
- Verify the translation key exists in the JSON:
- Check for typos in nested keys -
videos.sortby.videoidrequires all parent keys to exist.
Solution: Validate JSON syntax, check file permissions, verify key path exists in the translation file.
CSS Styles Not Applying
Symptom: Page looks unstyled or broken layout.
Rules:
- Only use
assets/css/style.css- no external CSS frameworks (Bootstrap, Tailwind, etc.) - Check for specificity conflicts with Style Manager overrides (Phase 12)
- Verify the stylesheet is loaded in
includes/header.php - Check browser cache - append
?v=timestampto stylesheet URL
Solution:
Dark Mode Not Working
Symptom: Dark mode toggle doesn't change the page appearance.
Diagnosis:
- Check
featuredarkmodeis enabled in feature toggles - Verify
localStorageis available:
- Confirm
body.dark-modeCSS rules exist inassets/css/style.css - Check that both
bodyandhtmlelements get the class:
Solution: Enable the feature toggle, clear localStorage, verify CSS dark mode rules exist.
Video Player Not Loading
Symptom: Video player area is blank, shows error, or spinner never completes.
Diagnosis:
Check browser Network tab for/ct/api/v1/videos/{id} requestVerify video data is returned with valid URLsCheck access control - user may lack permission (free/premium/VIP)For HLS: verify HLS.js is loaded and browser supports it
- Check
securemedia.phptoken generation:
Solution: Check API response, verify access control, ensure HLS.js or native HLS support is available, verify media token is valid.
Click Tracking Not Working
Symptom: External links not being tracked, or affiliate revenue is missing.
Critical rule: ALL external links MUST route through click.php. Direct links incur a 100% skim penalty.
Correct format:
// JavaScript
const url = click.php?url=${encodeURIComponent(externalUrl)}&type=${type}&id=${id};
Diagnosis:
- Check that
click.phpexists at the project root - Verify
tblClickTrackingis receiving records:
- Check
tblContentClicksfor aggregated counts
Solution: Audit all external links to ensure they use click.php. Use browser DevTools to verify link href attributes.
SEO Meta Tags Missing
Symptom: Social media shares show generic or missing preview data. Search engines don't index properly.
Cause: SEO data must be loaded BEFORE header.php is included.
Correct order:
// 2. Fetch data for SEO
$api = InternalApiHelper::getInstance();
$videoData = $api->getVideoForSeo($videoId);
// 3. NOW include header (generates meta tags from loaded data)
requireonce DIR . '/includes/header.php';
Diagnosis:
View page source and check for<meta property="og:title"> tagsUse Facebook/Twitter debugger tools to validate Open Graph tags
- Check
ct/dat/seosettings.jsonfor template configuration
Solution: Ensure SEO data is loaded before header, verify SeoHelper.php and InternalApiHelper.php are working.
Cam Performers System
No Performers Appearing
Symptom: Cam performers page is empty, no performer cards shown.
Diagnosis (in order):
- Check cron jobs are running:
- Verify API credentials in Admin -> Cam Settings
- Check
tblCamsSitesfor enabled sites:
- Verify
featurelivecamsis enabled in feature toggles - Check logs:
- Test the internal API directly:
Solution: Enable cron jobs, verify API credentials, enable the feature toggle.
All Performers Showing Offline
Symptom: Performers exist but all show as offline.
Diagnosis:
- Run the cron update manually:
- Check if external API is responding:
- Verify API token hasn't expired
- Check database for online performers:
Solution: Run cron manually, verify external API credentials are valid.
External API 403 Forbidden
Symptom: External CrakRevenue API returns
{"message": "Forbidden"} or HTML error page.
Causes:
- Missing or invalid
x-api-keyheader - Missing
User-Agentheader (returns HTML error page) - API key revoked by CrakRevenue
Diagnosis:
Solution: Verify x-api-key (stored in tblCamsSites.apiData) and ensure requests include a User-Agent header. Contact CrakRevenue if key was revoked.
External API 401 Unauthorized
Symptom: External API returns
{"message": "Unauthorized: brands not allowed"} or similar.
Causes:
- Invalid or missing
tokenparameter - Requesting brands not authorized for your token
- Token is domain-bound and being used from wrong domain
Diagnosis:
Solution: Verify token (stored in tblCamsSites.parameters), ensure you only request authorized brands, verify token is for your domain.
Slow Cam Performers Page
Symptom: Cam performers page takes 5+ seconds to load.
Diagnosis:
- Use the debug panel: add
?debug=1to the URL to see timing breakdown - Use the full debug tool:
Optimization checklist:
- Enable fast mode - ensure frontend uses
?fast=1parameter - Check APCu is installed and enabled:
- Verify stats cache cron is running:
- Reduce
perpageto 24 or less - Check for blocking database queries (see Table Locks)
Three-layer caching strategy:
- Layer 1: APCu in-memory cache (30s TTL)
- Layer 2: Database stats cache (
tblCamsPerformersStatsCache) - Layer 3: Fast mode (skip COUNT queries entirely)
Solution: Enable all three caching layers and verify cron jobs are running.
Affiliate Revenue Missing
Symptom: Clicks on cam performers not tracking, affiliate commissions not appearing.
Cause: External performer links not routed through click.php.
Required format:
Also verify:
- Affiliate ID is present in the
roomUrlfrom the external API tblClickTrackingis recording cam performer clicks- Performer
chatroomurlcontains valid affiliate tracking parameters
Solution: Audit all performer links to ensure click.php routing. Verify affiliate ID in room URLs.
Live Streaming (LiveKit)
LiveKit Server Not Starting
Symptom: Docker container won't start or crashes immediately.
Diagnosis:
Check logs
Verify Docker is running
Common causes:
- Port conflicts (7880, 7881, 40000-40100 already in use)
- Invalid
livekit-config.yamlsyntax - Docker not installed or not running
- Insufficient permissions
Solution:
Restart container
Or recreate
Stream Not Connecting
Symptom: Creator clicks "Start Streaming" but video never appears. Viewers see loading spinner.
Diagnosis:
- Check LiveKit config in
ct/dat/config.inc.php:
- Verify WebSocket connection from browser:
- Open browser console (F12)
- Look for WebSocket connection errors
- Check if
wss://URL is accessible
- Verify firewall rules:
Required ports:
7880- WebSocket signaling7881- TCP media40000-40100- UDP media (WebRTC)
Solution: Verify LiveKit credentials match between config and server, check firewall ports, ensure SSL is configured for wss://.
High Latency / Buffering
Symptom: Live stream has noticeable delay (>2 seconds) or frequent buffering.
Causes:
- UDP ports blocked - WebRTC falls back to TCP (higher latency)
- Server overloaded
- Client bandwidth insufficient
Solution:
- Ensure UDP ports 40000-40100 are open
- Check server load:
- Verify
nodeipinlivekit-config.yamlmatches your public IP
Chat Not Working
Symptom: Chat messages not sending or not appearing for other viewers.
Diagnosis:
- Check
tblLiveStreamChatfor recent messages:
- Verify WebSocket connection in browser console
- Check that the stream ID is valid in
tblLiveStreams
Solution: Verify stream exists, WebSocket is connected, and chat API endpoint is responding.
Creator Monetization
Tips Not Processing
Symptom: Tips sent but not appearing in creator's balance or transaction history.
Diagnosis:
-- Check creator tips
SELECT FROM tblCreatorTips ORDER BY createdat DESC LIMIT 10;
-- Check user token balance
SELECT id, username, tokenbalance FROM tblCMSUsers WHERE id = <USERID>;
Common causes:
- Insufficient token balance
- Creator profile not verified
- API endpoint error (check response)
Solution: Verify sender has sufficient tokens, creator profile is active, and POST /tips/send returns success.
Earnings Not Aggregating
Symptom: Creator earnings dashboard shows $0 despite receiving tips/subscriptions.
Cause: Earnings aggregation cron job not running.
Required cron:
Diagnosis:
-- Check if raw transactions exist
SELECT SUM(amount) as total
FROM tblTokenTransactions
WHERE recipientid = <ID> AND createdat >= CURDATE();
Solution: Ensure the aggregatecreatorearnings.php cron job is running every minute.
Creator Posts Not Displaying
Symptom: Creator wall is empty or posts aren't visible.
Diagnosis:
- Check
featurecreatorpostsis enabled - Verify posts exist:
- Check post visibility settings (public vs subscriber-only vs PPV)
- Verify media uploads if post contains images/video:
Solution: Enable the feature toggle, verify posts exist in the database, check access control for post visibility.
Subscription Issues
Symptom: Subscriptions not activating, or subscribers can't access content.
Diagnosis:
-- Check subscription packages
SELECT FROM tblCreatorSubscriptionPackages WHERE creatorid = <CREATORID>;
Solution: Verify featuresubscriptions is enabled, check payment processing, verify subscription record status.
Authentication & Users
Login Fails
Symptom: Login form returns error or redirects back without logging in.
Diagnosis:
- Test the auth API directly:
- Check user account status:
Remember: column is accountstatus, NOT status.
- Check if account is locked, suspended, or unverified.
Solution: Verify account exists, is active (accountstatus = 'active'), and email is verified if required.
Session Issues
Symptom: User logged in via API but pages don't recognize session. Constant redirects to login.
Diagnosis:
- Check
auth/setsession.phpis being called after login - Verify session cookie is being set:
- Check PHP session configuration:
Solution: Ensure setsession.php is called after API login returns JWT token. Verify session cookie domain matches.
2FA Problems
Symptom: Two-factor authentication code rejected, or 2FA setup fails.
Diagnosis:
- Check
feature2fais enabled - Verify server time is accurate (TOTP codes are time-based):
- Time drift of >30 seconds will cause code rejection.
Solution: Sync server time with NTP, verify 2FA secret is stored correctly.
Cron Jobs
Verifying Cron Jobs Are Running
Check if cron jobs are configured:
Check if they've run recently:
Check last modification of log files
Test a cron job manually:
Required Cron Schedule
The following cron jobs must be running for full system operation:
- php /path/to/ct/admin/cron/ftpvideoprocessor.php
Cam Performers
Creator Monetization
- php /path/to/ct/admin/cron/aggregatecreatorearnings.php
Site Maintenance
Impact of missing cron jobs:
Debug Tools Reference
All debug tools require the security key parameter:
?key=comus2025
Kill a blocking query via URL:
Cam performers debug panel:
Shows: API URL, TTFB, download time, JSON parse time, DOM render time.
Log File Locations
Common SQL Fixes
Frequently-used SQL commands for fixing common data issues:
-- Reset errored videos for reprocessing
UPDATE tblVideos SET status = 'pending', errormessage = NULL
WHERE status = 'error' AND videoid IN (1, 2, 3);
-- Clear stuck processing jobs
DELETE FROM tblVideoProcessingJobs
WHERE videoid IN (SELECT videoid FROM tblVideos WHERE status = 'pending');
-- Check cam performer online counts by site
SELECT s.name, COUNT(p.performerid) as onlinecount
FROM tblCamsPerformers p
JOIN tblCamsSites s ON p.site = s.recordnum
WHERE p.status = 1 AND p.enabled = 1
GROUP BY s.name;
-- Check feature toggle status
SELECT settingkey, settingvalue
FROM tblSettings
WHERE settingkey LIKE 'feature%'
ORDER BY settingkey;
-- Check recent click tracking
SELECT type, COUNT() as clicks, MAX(createdat) as lastclick
FROM tblClickTracking
GROUP BY type ORDER BY clicks DESC;
-- Find users with authentication issues
SELECT id, username, accountstatus, emailverified, lastlogin
FROM tblCMSUsers
WHERE accountstatus != 'active'
ORDER BY id DESC LIMIT 20;
-- Check storage server health
SELECT serverid, servername, servertype, enabled,
lastcheck, lasterror
FROM tblStorageServers;
-- Verify creator earnings aggregation
SELECT creatorid, earningdate, totaltips, totalsubscriptions,
totalppv, totalearnings
FROM tblCreatorEarningsDaily
ORDER BY earningdate DESC LIMIT 20;