J'essaie de créer un système "flux" sur mon site où l'activité des postes d'utilisateurs est affichée. Pour ce faire efficacement et commander toute activité par date, j'ai besoin de tout mettre dans une énorme requête (sauf s'il y a une autre façon de le faire efficacement). Mon problème est que ma page "Feed" actuelle a plusieurs appels AJAX pour obtenir toutes les données différentes telles que des commentaires sur le poste d'utilisateur ou les votes sur les débats que l'utilisateur a commencé. Existe-t-il un moyen de combiner des requêtes non liées pour rendre plusieurs résultats? Par exemple, puis-je combiner ces deux requêtes en une? Query 1:
SELECT polls.poll_id, polls.title, polls.idUsers, polls.date, users.uidUsers, profileimages.image
FROM polls JOIN
users JOIN
profileimages
ON polls.idUsers = users.idUsers AND profileimages.idUsers = users.idUsers
WHERE polls.idUsers = '$following'
ORDER BY polls.date ASC";
3 Réponses :
Oui, vous pouvez le faire.
Mais une jointure intérieure comme je l'ai utilisée, peut produire beaucoup de résultats indésirables. P>
Vous devez donc utiliser phpmyadmin ou workbench .... P >
Pour exécuter une ces requêtes et voir si cela vous donne le résultat correct. Sinon, vous devez le regrouper ou ajouter plus d'où les conditions. P>
SELECT
t1.article_id
,t1.title
,t1.idUsers
, t2.poll_id
, t2.title
, t2.idUsers
, t2.date
, t1.uidUsers
, t2.image
FROM
(SELECT
articles.article_id
, articles.title
, articles.date
, articles.idUsers
, users.uidUsers
, profileimages.image
FROM
articles
JOIN users
JOIN profileimages
ON articles.idUsers = users.idUsers AND profileimages.idUsers = users.idUsers
WHERE articles.idUsers = '$following' AND articles.published = 'yes'
ORDER BY articles.date ASC) t1
inner join
(SELECT
polls.poll_id
, polls.title
, polls.idUsers
, polls.date
, users.uidUsers
, profileimages.image
FROM
polls
JOIN users
JOIN profileimages
ON polls.idUsers = users.idUsers AND profileimages.idUsers = users.idUsers
WHERE polls.idUsers = '$following'
ORDER BY polls.date ASC) t2
on t1.uidUsers = t2.uidUsers
ORDER BY t2.date;
Je ferais un syndicat tout et ajouterais une nouvelle colonne 'Type' sur chaque résultat de la requête.
select * from (
SELECT
articles.article_id as id,
articles.title as title,
articles.date as date,
articles.idUsers as idUsers,
users.uidUsers as uidUsers,
profileimages.image as image,
'article' as type
FROM articles
JOIN users ON articles.idUsers = users.idUsers
JOIN profileimages on profileimages.idUsers = users.idUsers
WHERE articles.idUsers = '$following' AND articles.published = 'yes'
union all
SELECT
polls.poll_id as id,
polls.title as title,
polls.date as date,
polls.idUsers as idUsers,
users.uidUsers as uidUsers,
profileimages.image as image,
'pool' as type
FROM polls
JOIN users ON polls.idUsers = users.idUsers
JOIN profileimages ON profileimages.idUsers = users.idUsers
WHERE polls.idUsers = '$following'
) query order by query.type, query.date
Vous pouvez note union tout code> avant rejoindre code> ing, car les jointures sont si similaires: $ suivant < / code> doit être transmis sous la forme d'un paramètre em> pas une chaîne. p> p>
Voir Pourquoi Dois-je fournir un exemple de reproductible minimal pour une requête SQL très simple?