diff --git a/mysql-test/r/view.result b/mysql-test/r/view.result
index 7bcfaf8bdc3ed1ef7484ac45f606e91b26e784f5..bd4e94bd1b32ef0f7f910d26ab458a557ef0c47c 100644
--- a/mysql-test/r/view.result
+++ b/mysql-test/r/view.result
@@ -1940,3 +1940,12 @@ s1	s2
 DROP PROCEDURE p1;
 DROP VIEW v1;
 DROP TABLE t1;
+create table t1 (f1 int, f2 int);
+create view v1 as select f1 as f3, f2 as f1 from t1;
+insert into t1 values (1,3),(2,1),(3,2);
+select * from v1 order by f1;
+f3	f1
+2	1
+3	2
+1	3
+drop table t1;
diff --git a/mysql-test/t/view.test b/mysql-test/t/view.test
index 6b6b3d8a00f3bfbba4074595c545ece8b18b9670..6b4113c0b052c3e716f74964cae63bd942182684 100644
--- a/mysql-test/t/view.test
+++ b/mysql-test/t/view.test
@@ -1778,3 +1778,12 @@ CALL p1();
 DROP PROCEDURE p1;
 DROP VIEW v1;
 DROP TABLE t1;
+
+#
+# Test for bug #11709 View was ordered by wrong column
+#
+create table t1 (f1 int, f2 int);
+create view v1 as select f1 as f3, f2 as f1 from t1;
+insert into t1 values (1,3),(2,1),(3,2);
+select * from v1 order by f1;
+drop table t1;
diff --git a/sql/item.cc b/sql/item.cc
index e53c1ebf73450d2c83dc45f76cfc437e8fd556ba..08395df4b734b3bf174d6f9b9a9123c5d0811b86 100644
--- a/sql/item.cc
+++ b/sql/item.cc
@@ -4499,6 +4499,35 @@ bool Item_direct_view_ref::fix_fields(THD *thd, Item **reference)
   return Item_direct_ref::fix_fields(thd, reference);
 }
 
+/*
+  Compare view field's name with item's name before call to referenced
+  item's eq()
+
+  SYNOPSIS
+    Item_direct_view_ref::eq()
+    item        item to compare with
+    binary_cmp  make binary comparison
+
+  DESCRIPTION
+    Consider queries:
+    create view v1 as select t1.f1 as f2, t1.f2 as f1 from t1;
+    select * from v1 order by f1;
+    In order to choose right field for sorting we need to compare
+    given item's name (f1) to view field's name prior to calling
+    referenced item's eq().
+
+  RETURN
+    TRUE    Referenced item is equal to given item
+    FALSE   otherwise
+*/
+
+
+bool Item_direct_view_ref::eq(const Item *item, bool binary_cmp) const
+{
+  Item *it= ((Item *) item)->real_item();
+  return (!it->name || !my_strcasecmp(system_charset_info, it->name,
+          field_name)) && ref && (*ref)->real_item()->eq(it, binary_cmp);
+}
 
 void Item_null_helper::print(String *str)
 {
diff --git a/sql/item.h b/sql/item.h
index 560f1124fb4fcf848a43985c0e149fa7511c1bdb..f748286b2f7e45cff54256901bc7552cf1684d4d 100644
--- a/sql/item.h
+++ b/sql/item.h
@@ -1516,6 +1516,7 @@ class Item_direct_view_ref :public Item_direct_ref
     :Item_direct_ref(thd, item) {}
 
   bool fix_fields(THD *, Item **);
+  bool eq(const Item *item, bool binary_cmp) const;
 };