2010-07-13 8 views
1

J'ai deux tables dont j'ai besoin de sélectionner toutes les lignes à partir desquelles l'ID utilisateur est $userid puis de les trier. J'ai essayé d'utiliser join, mais je ne pouvais même pas vraiment commencer à faire les choses correctement. Quelqu'un peut-il me diriger dans la bonne direction quant à la façon de faire ces dans une requête?Joindre 2 requêtes mysql

$result1 = mysql_query("SELECT * FROM paypal_sub_info 
      WHERE userid='$THEuserid' ORDER BY cur_time DESC"); 
$result2 = mysql_query("SELECT * FROM paypal_pay_info 
      WHERE userid='$THEuserid' ORDER BY cur_time DESC"); 

while($row = mysql_fetch_array($result1)){ 
    echo $row['txn_type']; 
} 

Solution:

SELECT * 
FROM paypal_sub_info sub,paypal_pay_info pay 
WHERE pay.userid = '$THEuserid' 
     AND sub.userid = '$THEuserid' 
ORDER BY pay.cur_time DESC,sub.cur_time DESC 

Répondre

3

Essayez ceci:

SELECT * FROM paypal_sub_info sub, paypal_pay_info pay 
WHERE pay.userid='$THEuserid' AND sub.userid='$THEuserid' 
ORDER BY pay.cur_time DESC, sub.cur_time DESC 

Si vous voulez juste 'txn_type', vous pouvez faire un SELECT pay.txn_type AS txn_type

+1

Dites que ce n'était pas valide. Il existe plusieurs champs avec des noms communs, cur_time en est un ... – Derek

+0

@Derek: Puisque la colonne 'cur_time' se trouve dans les deux tables, vous devez choisir quelle table ORDER BY doit utiliser et ajouter l'aliias à l'ORDER BY –

+0

J'ai utilisé cette solution sauf que j'ai changé la commande "ORDER BY pay.cur_time DESC, sub.cur_time DESC" Merci !!! – Derek

1

Je crois que vous voulez:

SELECT field1, field2, ... FROM paypal_sub_info WHERE userid='$THEuserid' 
    UNION 
    SELECT field1, field2, ... FROM paypal_pay_info WHERE userid='$THEuserid' 
    ORDER BY cur_time DESC 
+0

Cela suppose que les colonnes, au moins leurs types de données, tombent dans l'ordre identique. Je ne pense vraiment pas que c'est ce que l'OP est après, moi-même –

+0

Oui, un nombre différent de colonnes, m'a donné cette erreur. – Derek

+0

Bon point - Je vais engager le cerveau avant le clavier la prochaine fois. Je pense que l'op pourrait être après une UNION ici, tho '- étant donné le ORDER BYs (qui pourrait être erroné). –

1

Utilisation:

SELECT psi,*, ppi.* 
    FROM PAYPAL_SUB_INFO psi 
    JOIN PAYPAL_PAY_INFO ppi ON ppi.userid = psi.userid 
    WHERE psi.userid = $THEuserid 
ORDER BY psi.cur_time DESC, ppi.cur_time DESC 
0

Alors d'abord envisager d'utiliser mysqli pour tout projet sérieux. La réponse d'OMG Ponies est comment je suggérerais de le faire, je pensais que vous ne devriez pas avoir à spécifier les champs alias.wildcard séparément dans la clause select. C'est aussi une bonne pratique de spécifier les champs que vous essayez d'aller chercher plutôt que *, bien que nous utilisions beaucoup * quand nous sommes fainéants. La réponse de A me fait sourire parce que c'est techniquement ce que vous avez demandé, mais pas ce que je pensais que vous vouliez.

Avez-vous une description plus détaillée des données que vous essayez d'extraire, ou était-ce juste un exemple parce que vous avez du mal à trouver des jointures?

-J

+0

Vous devez spécifier l'alias parce qu'il y a une colonne 'cur_time' dans les deux tables - sans l'alias, vous obtiendrez une erreur de" référence de colonne ambiguë ". –

+0

que j'ai effectivement fait obtenir ... – Derek

+0

Je suis d'accord il y a une colonne ambiguë mais je viens de lancer des tests sur mysql 5.0.51/php 5.2.4: print_r (mysql_fetch_assoc (mysql_query ('select * des portefeuilles p rejoindre portfolio_images pi sur p .id = pi.portfolio_id '))); avec des schémas de:.. portefeuille - id, titre, customer_name, le type, la description portfolio_images - id, titre, portfolio_id, chemin, description et obtenu des résultats identiques pour les deux * et p *, pi * Tableau ( [ id] => 1 [title] => large [customer_name] => [type] => [description] => [portfolio_id] => 1 [path] => statique/images/from_pp/curvey_bush_1 .jpg ) s'il vous plaît édifiez-moi :-) – umassthrower