PHP MySQL saklı yordam içine değişken geçmek için nasıl

0 Cevap php

Ben aşağıdaki saklı yordam vardır:

proc_main:begin

declare done tinyint unsigned default 0;
declare dpth smallint unsigned default 0;


create temporary table hier(
 AGTREFERRER int unsigned, 
 AGTNO int unsigned, 
 depth smallint unsigned default 0
)engine = memory;

insert into hier values (p_agent_id, p_agent_id, dpth);

/* http://dev.mysql.com/doc/refman/5.0/en/temporary-table-problems.html */

create temporary table tmp engine=memory select * from hier;

while done <> 1 do

  if exists( select 1 from agents a inner join hier on a.AGTREFERRER = hier.AGTNO and hier.depth = dpth) then

    insert into hier 
      select a.AGTREFERRER, a.AGTNO, dpth + 1 from agents a
      inner join tmp on a.AGTREFERRER = tmp.AGTNO and tmp.depth = dpth;

    set dpth = dpth + 1;      

    truncate table tmp;
    insert into tmp select * from hier where depth = dpth;

  else
    set done = 1;
  end if;

end while;


select 
 a.AGTNO,
 a.AGTLNAME as agent_name,
 if(a.AGTNO = b.AGTNO, null, b.AGTNO) as AGTREFERRER,
 if(a.AGTNO = b.AGTNO, null, b.AGTLNAME) as parent_agent_name,
 hier.depth,
 a.AGTCOMMLVL
from 
 hier
inner join agents a on hier.AGTNO = a.AGTNO
inner join agents b on hier.AGTREFERRER = b.AGTNO
order by
 -- dont want to sort by depth but by commission instead - i think ??
 -- hier.depth, hier.agent_id; 
 a.AGTCOMMLVL desc;

drop temporary table if exists hier;
drop temporary table if exists tmp;

end proc_main

Fonksiyon işini iyi yapar iken - sadece şu anda AGTCOMMLVL azalan sırayla aracılığıyla sıralama sağlar. Saklı yordamın amacı kendi parentId ve ilişkili COMMLVL ile bir memberID maç için. Bir kez uygun eşleştirilmiş, bunun belirli bir üye hakkında bilgi dönmek için ikinci sorguda memberID kullanın.

Ben filtreler herhangi sayısına göre sıralamak mümkün istiyorum ama şu sorunları olurdu:

  1. Ben alana göre sıralamayı değiştirerek saklı yordam içine bir değişken geçmek için bir yol bulmak gibi olamaz.

  2. Ben olsa dahi - sort aslında sadece (örneğin ilk isim olarak, soyadı, vb) ikinci sorgudan veri içerebilir

  3. Ikinci sorguda bir tür Koşu sözdizimi doğru olsa bile hiçbir şey yok - her zaman geri saklı yordamın tür düşer.

herhangi bir fikir?

EDIT

Benim php kodu ile mysqli kullanır:

$sql = sprintf("call agent_hier2(%d)", $agtid);
$resulta = $mysqli->query($sql, MYSQLI_STORE_RESULT) or exit(mysqli_error($mysqli));

0 Cevap