fetch all data having a Price BETWEEN 100000 AND 10000000
Storing numeric data in a varchar column is causing your difficulty.

You can see this effect with a very simple test.

First a table with two columns where we'll store identical data; one column is a varchar, the other is an integer.

CREATE TABLE test
(
    v varchar(100) NOT NULL
    , n int NOT NULL
);


Insert some sample data:

INSERT INTO test (v, n)
VALUES (0, '0')
    , (1, '1')
    , (2, '2')
    , (100, '100')
    , (99, '99');


Show the data, ordered by the varchar column:

SELECT *
FROM test
ORDER BY v;


Results:

╔═════╦═════╗
║  v  ║  n  ║
╠═════╬═════╣
║   0 ║   0 ║
║   1 ║   1 ║
║ 100 ║ 100 ║
║   2 ║   2 ║
║  99 ║  99 ║
╚═════╩═════╝


Show the data, ordered by the integer column:

SELECT *
FROM test
ORDER BY n;


╔═════╦═════╗
║  v  ║  n  ║
╠═════╬═════╣
║   0 ║   0 ║
║   1 ║   1 ║
║   2 ║   2 ║
║  99 ║  99 ║
║ 100 ║ 100 ║
╚═════╩═════╝


The varchar column is sorted alphabetically, whereas the integer column is sorted numerically.

You should consider altering the price column to a numeric data type that supports the precision and magnitude you require.  Refer to the MySQL developer guide for fixed-point data types for more details.  I'd suggest considering decimal(18, 4) as a starting point for prices.  18 digits is the precision, i.e. the total number of digits that can be stored.  4 is the scale, which is the number of digits to the right of the decimal point.  If the price column was defined as decimal(18, 4), it would be able to store values such as 99999999999999.9999, and allow them to be sorted correctly.  Defining the column as a varchar is problematic since it will allow you to store hedgehog as well as 10000, which will lead to a variety of problems, not least of which will be the inability to obtain a total price of articles in a group.