Sélection des données à partir de 3 tables avec limite
Question
J'ai 3 tables PPC_Offers, Survery_Offers, Find_Offers (à partir de la section Admin, je saisis des données dans ces tables)
Maintenant sur le devant, je souhaite afficher les 3 dernières offres de ces tables.
I.e.Les plus tard 3 viendront, ils peuvent provenir d'une table unique ou de plusieurs tables ... il suffit de conserver "Dernières 3"
Comment puis-je faire cela?
Laravel fournit un moyen de faire cela?
ou dois-je avoir une table principale?
ou pouvez-vous me suggérer une requête SQL régulière pour cela?
S'il vous plaît aider. Merci.
Table PPC:
-------------------------
id | integer
title | varchar
url | varchar
description | varchar
created_at | timestamp
updated_at | timestamp
--------------------------
Table d'enquête:
-------------------------
id | integer
title | varchar
created_at | timestamp
updated_at | timestamp
--------------------------
Find Tableau de code:
-------------------------
id | integer
title | varchar
url | varchar
description | varchar
code | varchar
created_at | timestamp
updated_at | timestamp
--------------------------
La solution
En tant que recommandation, il peut être plus logique d'inclure les 3 de ces offres dans une table et d'utiliser un identifiant "offre_type" pour les distinguer les uns des autres, au lieu d'utiliser 3 tables différentes.Cela pourrait simplifier votre code.
Je crois que cela peut fonctionner avec votre configuration actuelle:
$ppc = DB::table('ppc_offers')
->select('title', 'url', 'description', 'NULL as code', 'updated_at');
$survey = DB::table('survey_offers')
->select('title', 'NULL as url', 'NULL as description', 'NULL as code', 'updated_at');
$find = DB::table('find_offers')
->select('title', 'url', 'description', 'code', 'updated_at');
return $ppc->unionAll($survey)->unionAll($find)
->orderBy('updated_at', 'desc')
->take(3)
->get();
Autres conseils
Faites 3 questions les syndicates avec les mêmes noms pour les colonnes
select * from
(
(query1 order by id desc limit 3) x
union
(query2 order by id desc limit 3) y
union
(query3 order by id desc limit 3) z
(