To get a path on one line like that:

http://www.kneipenculture.de/path_on_one_line.PNG

Please use the following function

CREATE OR REPLACE FUNCTION intersection_on_line(gid_a integer,start geometry,ende geometry)
  RETURNS geometry AS
$BODY$
DECLARE


number_of_points integer;
first_point_of_geometry geometry;
j integer;
zaehler integer;
start geometry;
ende geometry;
point_geom geometry;
line text;
line2 text;
mywkt text;
herewego text;
komma text;
mywkt_anfang text;
mywkt_ende text;
p text;
q text;

endgeometry geometry[] := '{}';


BEGIN

RAISE NOTICE 'Here we go........';



-- Give me the number of points  of the geometry 
number_of_points:=ST_NumPoints(the_geom) from ways where gid=$1;

mywkt:='';
mywkt_anfang:='';
mywkt_ende:='';
line:='';
line2:='';
komma:=',';
herewego:='';
zaehler:=0;

RAISE NOTICE 'Numer of points in that geometry is %',number_of_points;




FOR j IN 1 .. number_of_points LOOP

--Give me the geometry
point_geom:=PointN(c.the_geom,j) from (select (the_geom) from ways where gid=$1)c,ways where gid=$1;



endgeometry[j]:=point_geom;

RAISE NOTICE 'The point is %',astext(point_geom);

--Create lines to see if clickpoint intersects
line:='';
line:= line || X(endgeometry[j])||' '||Y(endgeometry[j])||', '||X(endgeometry[j-1])||' '||Y(endgeometry[j-1]);

-- A line is build
line2:='(' || line || ')';
line:='LINESTRING'||'(' || line || ')';

RAISE NOTICE 'Linie %',line;


SELECT INTO p ST_intersects(line,buffer($2,1));
SELECT INTO q ST_intersects(line,buffer($3,1));

--If clickpoint intersects 
IF p='t' OR q='t' AND zaehler!='2' THEN

zaehler:=zaehler+1;
RAISE NOTICE 'treffer......%',zaehler;
herewego:=1;


END IF;


IF zaehler='2'THEN
herewego:=0;

END IF;


--start_point(click)) is first point
IF j=1 THEN

mywkt:= mywkt || X($2)||' '||Y($2) || komma;
END IF;

IF j!=number_of_points THEN
IF herewego='1' THEN

--Filling geonetry
mywkt:= mywkt || X(point_geom)||' '||Y(point_geom) || komma;
END IF;


--Endpoint is clickpoint end
ELSE 
mywkt:= mywkt || X($3)||' '||Y($3);
END IF;
 

RAISE NOTICE '------------------';


END LOOP;


-- The following is the geometry
mywkt:='LINESTRING'||'(' || mywkt || ')';
RAISE NOTICE 'The geometry is %',mywkt;
RETURN mywkt;


END;






$BODY$
  LANGUAGE 'plpgsql' IMMUTABLE STRICT;

It is called in routing3.php if startedge-gid and end-edge-gid are equal.

if ($startEdge['gid']==$endEdge['gid']){




$abfrage_path_between_two_points="SELECT astext(intersection_on_line($result_besidegeometrie_begin_gid,'$point_on_line_begin','$point_on_line_ende')) as wkt,ST_length(schnittpunkt_auf_linie($result_besidegeometrie_begin_gid,'$point_on_line_begin','$point_on_line_ende')) as length";

//echo $abfrage_path_between_two_points;
$query7 = pg_query($con,$abfrage_path_between_two_points);
$result_path_between_two_points= pg_fetch_result($query7, 0, wkt);
$result_length_between_two_points= pg_fetch_result($query7, 0, length);




 
 
 
  
$searching_wkt_begin=$result_path_between_two_points;
$searching_wkt_ende=$result_path_between_two_points;
$length_begin=$result_length_between_two_points;
$length_ende=$result_length_between_two_points;
//echo "Die Strecke ".$result_path_between_two_points;



}