2016-04-03 8 views
1

Ich habe zwei Tabellen in meiner Datenbank, eine davon ist order und die andere ist user.Warum würde innerer Join in MySQL nicht verwandte Informationen zurückgeben?

Ich möchte die Informationen für eine Bestellung zusammen mit dem zugehörigen Benutzer, der die Bestellung gemacht hat, ziehen, um dies zu tun, habe ich eine INNER JOIN verwendet, um die beiden Tabellen auf den Namen des Benutzers zu verbinden.

Das Problem ist jedoch, dass es die richtigen Bestellinformationen bringt, aber der Benutzer ist nicht der zugehörige Benutzer und ist stattdessen der erste Benutzerdatensatz in der Datenbank.

Warum in der Welt passiert das?

Hier ist meine Frage:

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'"; 

Ich verstehe nicht, warum das nicht funktioniert. Kann mir bitte jemand eine Richtung geben?

+1

Sie sind auf etwas, das sehr wohl nicht einzigartig sein könnte, sollten Sie etwas mehr wie innere Beitritt haben ... order.user_id = user.id –

+0

Wenn der Benutzer mehrere Aufträge macht, dann hätte ich nicht das gleiche Problem für die Einzigartigkeit? – SherwoodPro

+1

Nein, ein Benutzer kann mehrere Bestellungen haben. Ein Benutzer pro Bestellung. Aber was ich meinte, ist die Tatsache, dass wenn Sie 2 Benutzer mit dem gleichen Namen haben, beide mögliche Übereinstimmungen für diese Bestellung sein werden. Es wird einfach das erste gefundene Match auswählen. –

Antwort

4

I`m Erraten Sie wollen

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

Ihre Version

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

wird wahrscheinlich einige Umwandlungen unter der Haube machen versuchen, die Dinge zu addieren, + concats Dinge in SQL Server, nicht

mysql
+0

Das funktioniert großartig. Wenn es dir nichts ausmacht, wenn ich frage, wann ich das + anstelle von CONCAT verwenden würde, wenn es die Dinge so vermischen kann? – SherwoodPro

+1

@SherwoodPro nur in SQL-Server können Sie + verwenden, um Dinge zu contrahieren, es ist nur, dass mysql ist sehr freizügig erlaubt Ihnen, Strings zu addieren, was zu unvorhersehbaren Ergebnissen führt – Mihai