2016-04-03 28 views
1

Veritabanımda iki tablo var, bunlardan biri order ve diğeri user.Neden MySQL'e Inner Join unrelated information?

Siparişle ilgili bilgileri, siparişi veren ilişkili kullanıcıyla birlikte çekmek istiyorum, bunu yapmak için kullanıcının adındaki iki tabloyu birleştirmek için INNER JOIN kullanıyorum. Bununla birlikte, sorun doğru sipariş bilgisini getirmesidir, fakat kullanıcı ilgili kullanıcı değildir ve bunun yerine veritabanındaki ilk kullanıcı kaydıdır.

Neden bu dünyada oluyor? Bu neden çalışmadığını anlamıyorum

SELECT orders.oid, 
      orders.ordernumber, 
      orders.date_requested, 
      orders.date_approved, 
      orders.status, 
      orders.region, 
      orders.users_name, 
      orders.comments, 
      orders.customShippingAddress, 
      orders.approval_comments, 
      orders.approved_by_id, 
      users.firstname, 
      users.lastname, 
      users.address, 
      users.address2, 
      users.city, 
      users.`state`, 
      users.zip, 
      users.phonenum, 
      users.cellnum, 
      users.officenum, 
      users.region, 
      users.shipping_address 
     FROM orders 
INNER JOIN users 
     ON orders.users_name=users.firstname + ' ' + users.lastname 
    WHERE orders.oid='$id'"; 

:

İşte benim sorgusu olur. Herkes bana biraz yön verebilir mi lütfen?

+1

Benzersiz olmama ihtimali olan bir şeye katılıyorsunuz, iç birleştirme gibi bir şeylere sahip olmalısınız ... order.user_id = user.id –

+0

Kullanıcı birden fazla siparişte bulunuyorsa teklik için aynı sorunu olmaz mıydı? – SherwoodPro

+1

Hayır, bir kullanıcının birden fazla siparişi olabilir. Sipariş başına bir kullanıcı olsa da. Ama kastettiğim, aynı isimde 2 kullanıcınız varsa, bu sipariş için her ikisinin de olası eşleşmeleri olacağı gerçeğiydi. Sadece bulunan ilk eşleşmeyi seçecektir. –

cevap

4

I `sen

ON orders.users_name=CONCAT(users.firstname ,' ',users.lastname) 

Sürüm

ON orders.users_name=users.firstname + ' ' + users.lastname 

muhtemelen sql sunucusunda bazı şeyleri eklemeye çalışırken başlık altında dönüşüm, + concats şeyler yapacak değil

mysql istiyorum tahmin
+0

Bu harika çalışıyor. Bana soramazsan, böyle şeyler karıştırabilirse, CONCAT yerine + ne zaman kullanırdım? – SherwoodPro

+1

@SherwoodPro sadece sql sunucuda şeyler dolandırmak için + kullanabilirsiniz, sadece mysql çok dizeleri eklemenize izin vermez, öngörülemeyen sonuçlara yol açıyor – Mihai