0
votes

Existe-t-il un moyen de renvoyer plusieurs résultats non liés dans une requête SQL?

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 :


0
votes

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;


0 commentaires

0
votes

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 


0 commentaires

0
votes

Vous pouvez union tout avant rejoindre ing, car les jointures sont si similaires: xxx

note $ suivant < / code> doit être transmis sous la forme d'un paramètre pas une chaîne.


0 commentaires