EW适用于MySQL 5.7.7及以下版本。 | country | name | age | price | -------------------------------- | US | john | 22 | 20 | | Fran
EW适用于MySQL 5.7.7及以下版本。EW适用于MySQL 5.7.7及以下版本。 | country | name | age | price | -------------------------------- | US | john | 22 | 20 | | Fran,mysql,views,Mysql,Views,EW适用于MySQL 5.7.7及以下版本。 | country | name | age | price | -------------------------------- | US | john | 22 | 20 | | France | Anne | 10 | 15 | | Sweden | Alex | 49 | 10 | | country | name | price | row_num | ----------------
| country | name | age | price |
--------------------------------
| US | john | 22 | 20 |
| France | Anne | 10 | 15 |
| Sweden | Alex | 49 | 10 |
| country | name | price | row_num |
------------------------------------
| US | john | 20 | 1 |
| France | Anne | 10 | 2 |
| Sweden | Alex | 5 | 3 |
SELECT @i:=@i+1 AS row_num, testing.country, testing.name, testing.price
FROM testing testing,(SELECT @i:=0) derivedTable
order by name
CREATE OR REPLACE view vwx (country, name, price, num_row) AS SELECT mytable.country, mytable.name, mytable.price, @i:=@i+1 AS row_number
FROM testing testing,(SELECT @i:=0) derivedTable
order by name;
CREATE OR REPLACE view vwx (country, name, price, num_row) AS
SELECT country, name, price, @index := @index + 1 AS num_row
FROM testing, (SELECT @index := 0) temp
CREATE TABLE testing (
id int(11) NOT NULL DEFAULT 0,
country varchar(255) DEFAULT NULL,
name varchar(255) DEFAULT NULL,
age int(11) DEFAULT NULL,
price int(11) DEFAULT NULL,
PRIMARY KEY (id)
);
INSERT INTO testing(id, country, name, age, price) VALUES
(1, 'US', 'john', 22, 20),
(2, 'France', 'Anne', 10, 15),
(3, 'Sweden', 'Alex', 49, 10),
(4, 'France', 'Anne', 11, 16);
SELECT
t1.*, COUNT(*) row_num
FROM testing t1
LEFT JOIN testing t2
ON t2.name < t1.name OR (t2.name = t1.name AND t2.id <= t1.id)
GROUP BY t1.name, t1.id;
+----+---------+------+------+-------+---------+
| id | country | name | age | price | row_num |
+----+---------+------+------+-------+---------+
| 3 | Sweden | Alex | 49 | 10 | 1 |
| 2 | France | Anne | 10 | 15 | 2 |
| 4 | France | Anne | 11 | 16 | 3 |
| 1 | US | john | 22 | 20 | 4 |
+----+---------+------+------+-------+---------+
delimiter //
CREATE FUNCTION `func_inc_var_session`() RETURNS int
NO SQL
NOT DETERMINISTIC
begin
SET @var := @var + 1;
return @var;
end
//
delimiter ;
CREATE OR REPLACE VIEW myview (place, name, hour, price, counter)
AS SELECT place, name, hour, price, func_inc_var_session()
FROM yourtable
WHERE input_conditions_here;
CREATE OR REPLACE TEMPORARY TABLE myview (
country VARCHAR(250),
name VARCHA(50),
price VARCHAR(50),
row_num int(11)
);
SET @row_num = 0;
INSERT INTO myview (country,name,price,row_num)
SELECT @row_num:=@row_num+1
as country,name,price,row_num
FROM testing;
SELECT * FROM myview;
+---------+------+------+-------+---------+
| country | name | age | price | row_num |
+---------+------+------+-------+---------+
| Sweden | Alex | 49 | 10 | 1 |
| France | Anne | 10 | 15 | 2 |
| France | Anne | 11 | 16 | 3 |
| US | john | 22 | 20 | 4 |
+---------+------+------+-------+---------+
CREATE DEFINER=`root`@`localhost` FUNCTION `func_inc_var_session`() RETURNS int(11)
begin
SET @var := IFNULL(@var,0) + 1;
return @var;
end
SELECT country, name, price, @ID := @ID + 1 AS row_num
FROM testing,
(SELECT @ID := 0) temp
| country | name | price | row_num |
------------------------------------
| US | john | 20 | 1 |
| France | Anne | 10 | 2 |
| Sweden | Alex | 5 | 3 |
| country | name | price | row_num |
------------------------------------
| US | john | 20 | 4 |
| France | Anne | 10 | 5 |
| Sweden | Alex | 5 | 6 |
delimiter //
CREATE FUNCTION `func_inc_var_session`(reset BIT) RETURNS int
NO SQL
NOT DETERMINISTIC
begin
IF reset THEN
SET @var := 0;
ELSE
SET @var := IFNULL(@var,0) + 1;
END IF;
return @var;
end
//
delimiter ;
CREATE OR REPLACE VIEW country_view (country, name, price, row_num)
AS SELECT country, name, price, func_inc_var_session(0)
FROM country
JOIN (SELECT func_inc_var_session(1)) r