在php / mysql表中使用多个join作为对象或类似的东西

时间:2015-09-04 11:53:37

标签: php mysql join

在我的mysql数据库中我有一个“4级父表”,当我在php中使用它时,我不想每次多次连接时都写... 示例

procedure TfrmMain.MyVSTHeaderDrawQueryElements(Sender: TVTHeader;
  var PaintInfo: THeaderPaintInfo; var Elements: THeaderPaintElements);
begin
  Elements := [hpeBackground];
end;

procedure TfrmMain.MyVSTAdvancedHeaderDraw(Sender: TVTHeader;
  var PaintInfo: THeaderPaintInfo; const Elements: THeaderPaintElements);
begin
  if hpeBackground in Elements then
  begin
    PaintInfo.TargetCanvas.Brush.Color := clFuchsia; // <-- your color here
    if Assigned(PaintInfo.Column) then
      DrawFrameControl(PaintInfo.TargetCanvas.Handle, PaintInfo.PaintRectangle, DFC_BUTTON, DFCS_FLAT or DFCS_ADJUSTRECT); // <-- I think, that this keeps the style of the header background, but I'm not sure about that
    PaintInfo.TargetCanvas.FillRect(PaintInfo.PaintRectangle);
  end;
end;

2 个答案:

答案 0 :(得分:1)

使用存储过程作为变量查询的简写。

https://dev.mysql.com/doc/refman/5.0/en/create-procedure.html

使用视图的好处是完全使用WHERE过滤器。

查询视图时,优化器可能会决定

select * from (select ... from ...) where col=value

使用存储过程时,您将拥有

select ... from ... where col=value

性能差异可能很大。

答案 1 :(得分:1)

  

当我在php中使用它时,我不想每次都写多次   加入。

考虑使用下面的查询创建VIEW,然后在PHP代码中使用该视图

create view vw_multilevelquery as
select ... FROM tableA 
INNER JOIN tableB ON (tableA.id = tableB.idA) 
INNER JOIN tableC ON (tableB.id = tableC.idB)...

PHP代码中,只需在创建的视图上执行SELECT,如

select * from vw_multilevelquery;