2017-08-04 1 views
0

Ich habe eine Benutzer-Tabelle in der Datenbank, wo alle Benutzer des Systems gespeichert sind. Die Tabelle hat eine user_id und einen business_name und einen first_name. Einige Benutzer sind Händler und erhalten einen Firmennamen, einige Benutzer sind Verbraucher und erhalten einen Vornamen. In einer zweiten Tabelle habe ich Transaktionen mit einer user_id und einer merchant_id (die die Transaktion definieren) und einen Betrag. Beide IDs verweisen auf Benutzertabelle.Wie erhalten Sie verschiedene Ergebnisse von einer MySQL-Tabelle?

Table users: 
user_id bus_name first_name role_id 
1    Thomas  10 
2  comp1     7 
3    Peter   10 
4  comp2     7 
(role_id is defining with 10=consumer, 7=merchant) 

Table transactions: 
trans_id amount user_id merchant_id 
1   12  1   2  
2   23  3   2 
3   34  3   4 
4   19  1   4 

Jetzt möchte ich mit einem Ergebnis wie eine Tabelle, eine Abfrage haben: Diese Tabelle, die Transaktion mit dem Betrag, user_id, first_name, merchant_id und bus_name enthalten sollte.

Ich möchte dieses Ergebnis erhalten:

trans_id amount user_id first_name merchant_id bus_name 
1   12  1  Thomas  2   comp1 
2   23  3  Peter  2   comp1 
3   34  3  Peter  4   comp2 
4   19  1  Thomas  4   comp2 

ich das Problem, dass entweder ich bekomme nur die first_name und leer bus_name oder erhalte ich nur die bus_name aber leer first_name. ich links bin mit beitreten:

... 
left join `users` 
on(
(`transactions`.`user_id` = `users`.`user_id`) 
) 
... 

Aber dafür würde ich für user_id = 1 die first_name = Thomas und die bus_name = ‚‘ wäre leer, weil ich auf eine Zeile in der Tabelle nur als Referenz und nicht auch zu einem anderen Benutzer mit user_id = 2.

Aber ich will, wie etwas sagen:

for trans_id=1 
get first_name FROM users WHERE transactions.user_id = users.user_id 
AND 
get bus_name FROM users WHERE transactions.merchant_id = users.user_id 

Vielen Dank für Ihre Hilfe, ich so viele Dinge versucht, aber es funktioniert nicht.

Antwort

1

Sie haben zweimal die Benutzertabelle verbinden:

SELECT t.*, u.first_name, m.bus_name 
FROM transactions t 
JOIN users as u 
    ON t.user_id = u.user_id 
JOIN users as m 
    ON t.merchant_id = m.merchant_id 
+0

Großartig, danke, es hat funktioniert! – user3899575

0

Sie duoble nutzen könnten beitreten in Tabelle users

select a.trans_id, a.amount , a.user_id, b.first_name, a.merchant_id, c. bus_name 
from transactions a 
inner join users b on a.user_id = b.user_id and b.role_id = 10 
inner join users c on a.merchant_id = c.user_id and c.role_id = 7 
0

Um die Benutzertabelle zweimal funktionierte gut zu verbinden. Mit "link join users als Consumer" erstelle ich eine Art virtuelle Benutzer Tabelle namens "Consumer", dieser ist verbunden. Natürlich musste ich in Select auch den Tabellennamen anpassen. Gleiches gilt für die zweite "virtuelle" Tabelle der Benutzer, die "Händler" genannt wird.

select 
`transactions`.`trans_id` AS `trans_id`, 
`transactions`.`merchant_id` AS `merchant_id`, 
`merchant`.`bus_name` AS `bus_name`, 
`transactions`.`user_id` AS `user_id`, 
`consumer`.`first_name` AS `first_name`, 
`cards`.`card_id` AS `card_id`, 
`cards`.`serial_no` AS `serial_no` 
from (
     `transactions` 
      left join `cards` 
       on(
        (`cards`.`card_id` = `transactions`.`card_id`) 
       ) 
      left join `users` as consumer 
       on(
        (`consumer`.`user_id` = `transactions`.`user_id`) 
       ) 
      left join `users` as merchant 
       on(
        (`merchant`.`user_id` = `transactions`.`merchant_id`) 
       ) 


    ) 
Verwandte Themen