2010-09-19 4 views
1
$queryActivities = mysql_query(" 
SELECT ua.status, ua.date, 'status' AS is_table FROM users_statuslog ua 
    WHERE ua.uid = '{$showU[id]}' 
UNION ALL 
SELECT us.message, us.date 'wall' FROM users_wall us 
    WHERE us.uid = '{$showU[id]}' 
ORDER BY `date` DESC"); 

C'est ce que j'ai en ce moment. Et j'ai besoin de plus de colonnes de users_wall, plus que nécessaire dans users_statuslog. Comment puis-je les sélectionner? Parce que je ne peux pas faire comme ceci:Sélection de colonnes dans UNION

(Disons que je veux aussi isReplyFrom et vu de users_wall)

$queryActivities = mysql_query(" 
SELECT ua.status, ua.date, 'status' AS is_table FROM users_statuslog ua 
    WHERE ua.uid = '{$showU[id]}' 
UNION ALL 
SELECT us.message, us.date, us.isReplyFrom, us.viewed 'wall' FROM users_wall us 
    WHERE us.uid = '{$showU[id]}' 
ORDER BY `date` DESC"); 

Je reçois:

Les instructions SELECT utilisées ont un nombre différent de colonnes.

Répondre

2

Comme le message le dit, vous avez deux select avec un nombre différent de colonnes.
Une union va "concaténer" le résultat de votre premier choix à votre deuxième sélection, mais si le nombre de colonnes n'est pas le même, cela ne peut pas fonctionner.

Soit vous trouver un moyen d'avoir le même nombre de colonnes ou que vous ajoutez des colonnes factices à votre demande:

SELECT ua.status, ua.date, 'dummy' AS replyFrom, 'dummy' AS viewed, 'status' AS is_table FROM users_statuslog ua 
    WHERE ua.uid = '{$showU[id]}' 
UNION ALL 
SELECT us.message, us.date, us.isReplyFrom, us.viewed, 'wall' FROM users_wall us 
    WHERE us.uid = '{$showU[id]}' 
ORDER BY `date` DESC 

Ressources:

1

Vous devez ajouter quelques fausses colonnes à première requête

$queryActivities = mysql_query(" 
SELECT ua.status, ua.date, null AS isReplyFrom, null AS viewed, 'status' AS is_table FROM users_statuslog ua 
    WHERE ua.uid = '{$showU[id]}' 
UNION ALL 
SELECT us.message, us.date, us.isReplyFrom, us.viewed, 'wall' FROM users_wall us 
    WHERE us.uid = '{$showU[id]}' 
ORDER BY `date` DESC"); 
1

Les déclarations SELECT ne peuvent pas avoir un nombre différent de colonnes lors de l'utilisation UNION. Vous pouvez ajouter un champ constant à la place de la colonne supplémentaire. Peut-être quelque chose comme ceci:

SELECT ua.status, ua.date, 0 AS isReplyFrom, 'status' AS is_table 
FROM users_statuslog ua 
WHERE ua.uid = '{$showU[id]}' 
UNION ALL 
SELECT us.message, us.date, us.isReplyFrom, us.viewed 'wall' 
FROM users_wall us 
WHERE us.uid = '{$showU[id]}' 
ORDER BY `date` DESC 
Questions connexes