I have a problem that can't be that hard to solve, but I'm having problems with it.
A small table
create table tbl1
  ( a INT AUTO_INCREMENT NOT NULL UNIQUE PRIMARY KEY,
    b VARCHAR(100)
  );
and some data
insert into tbl1 
  (b) values
    ("/some/path/1"), 
    ("/some/path/2"), 
    ("/some/longer/path/1"),  
    ("/some/longer/path/2"),
    ("/some/way/1"),
    ("/some/longer/way/2");
The I want to query like this:
select length(b) - length(replace(b, '/', '')) no_dirs, b
  from tbl1
  where b like "%path%"
     and no_dirs = min(no_dirs);
which should return all rows where no_dirs has its miminum value. The last condition does not work.
I also fiddled with a subquery, but could not get that to work.
Suggestions?
You can't refer to no_dirs in the WHERE clause because the WHERE is evaluated before the SELECT clause, so no_dirs does not exist yet.
Also you can't use MIN like that. This is a solution with a subquery:
SELECT length(b) - length(replace(b, '/', '')) no_dirs, b
FROM tbl1
WHERE b like "%path%"
  AND length(b) - length(replace(b, '/', '')) = (
                      SELECT MIN(length(b) - length(replace(b, '/', ''))) 
                      FROM tbl1
                      WHERE  b like "%path%" )
See it working on SQLFiddle
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With