簡體   English   中英

基於Google可視化類別選擇器控件構建where子句

[英]building where clause based on google visualization category picker control

根據此鏈接 ,我們可以執行基於Google可視化類別選擇器控件的功能。 現在,我正在嘗試根據以下給出的三個控件構建相同類型的where子句。

var whereClause1;
var control1, control2, control3;
function drawVisualization() {
    // etc.
    control1 = // etc...

    control2 = // etc...

    control3 = // etc...

    // Register to hear state changes.
    google.visualization.events.addListener(control1, 'statechange', foo1);
    google.visualization.events.addListener(control2, 'statechange', foo2);
    google.visualization.events.addListener(control3, 'statechange', foo3);

  // etc.
}
function foo1() {
    var whereClauses = [];  
    if (control1.getState().selectedValues == '') {
        whereClauses.push("Something")
    }
    else if (control1) {
        whereClauses.push("Something1 = '" +control1.getState().selectedValues+ "'")
    }
    whereClause1 = whereClauses; 

    dothis();
}

function foo2() {
    var whereClauses = [];  
    if (control2.getState().selectedValues == '') {
        whereClauses.push("Something1 = '" +control1.getState().selectedValues+ "'")
    }
    else if (control2) {
        whereClauses.push("Something2 = '" +control2.getState().selectedValues+ "'")
    }
    whereClause1 = whereClauses; 

    dothis();
}

function foo3() {
    var whereClauses = [];  
    if (control3.getState().selectedValues == '') {
        whereClauses.push("Something2 = '" +control2.getState().selectedValues+ "'")
    }
    else if (control3) {
        whereClauses.push("Something3 = '" +control3.getState().selectedValues+ "'")
    }
    whereClause1 = whereClauses; 

    dothis();
}

function dothis() {
    whereClause += " AND " + whereClause1;
}

如何使用某些循環foo三個功能合並為一個功能foo

編輯: 在這里找到我的樣本小提琴

在示例中,當我在第1列中選擇“ A”時,where子句應采用值column0 = 'Home' AND column1 = 'A'而當我在第2列中選擇'bar'時,where子句應采用值column0 = 'Home' AND column1 = 'A' AND column2 = 'bar'並且如果我分別在column2和column3中選擇'bar'和'200',則where子句應采用值column0 = 'Home' AND column2 = 'bar' AND column3 = '200' ,依此類推。

也需要相反的順序。 也就是說,當我在第2列中選擇“選擇一個值”時,where子句應采用僅在第1列中設置的值。 我嘗試了以下方法:

function foo() {
    var whereClauses = [];  
    if (control1.getState().selectedValues == '')    { whereClauses.push("") }
    if (control1)    { whereClauses.push("Column1 = '" +control1.getState().selectedValues+ "'") }
    if (control2.getState().selectedValues == '')    { whereClauses.push("Column1 = '" +control1.getState().selectedValues+ "'") }
    if (control2)    { whereClauses.push("Column2 = '" +control2.getState().selectedValues+ "'") }
    if (control3.getState().selectedValues == '')    { whereClauses.push("Column2 = '" +control2.getState().selectedValues+ "'") }
    if (control3)    { whereClauses.push("Column3 = '" +control3.getState().selectedValues+ "'") }
    whereClause1 = whereClauses.join(" AND ");

    dothis();
  }

但是沒用。

如果我正確理解了您的要求,則此功能應執行您想要的操作:

function getWhereClause () {
    var selectedValues1 = control1.getState().selectedValues;
    var selectedValues2 = control2.getState().selectedValues;
    var selectedValues3 = control3.getState().selectedValues;
    var whereClauses = ["column0 = 'Home'"];

    if (selectedValues1.length) {
        whereClauses.push("Column1 = '" + selectedValues1[0] + "'");
    }
    if (selectedValues2.length) {
        whereClauses.push("Column2 = '" + selectedValues2[0] + "'");
    }
    if (selectedValues3.length) {
        whereClauses.push("Column3 = '" + selectedValues3[0] + "'");
    }
    var whereClause = whereClauses.join(' AND ');
    // do something with whereClause
    alert(whereClause);
}

參見此處的工作示例: http : //jsfiddle.net/asgallant/zrjnh/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM