2012-01-30 140 views
0

好吧,所以我有一個table1女巫包含我的主要配置文件數據。一個查詢從mysql中的2個表中獲取數據(使用php)

然後,我有表2女巫包含了我的自定義用戶創建的字段的名稱(和類型)(如果他們需要我的管理員可以創建主配置文件自定義字段)

而且我有一個包含了值表3表2中的自定義字段。所以表3引用了表2的字段名稱並鏈接到table1條目。

CREATE TABLE IF NOT EXISTS `table1` (
    `id` int(11) NOT NULL auto_increment, 
    `numero_membre` varchar(255) NOT NULL default '', 
    `membre` tinyint(1) NOT NULL default '0', 
    (...ALOT OF FIELDS, I DONT FEEL THE NEED TO SHOW THEM ALL) 
    `ordering` int(10) NOT NULL default '0', 
    `dateModified` datetime NOT NULL default '0000-00-00 00:00:00', 
    `dateCreated` datetime NOT NULL default '0000-00-00 00:00:00', 
    PRIMARY KEY (`id`) 
); 

CREATE TABLE IF NOT EXISTS `table2` (
    `id` int(10) NOT NULL auto_increment, 
    `nom` varchar(255) NOT NULL default '', 
    `type` varchar(255) NOT NULL default '', 
    `published` tinyint(1) NOT NULL, 
    `ordering` int(10) NOT NULL, 
    `datemodified` datetime NOT NULL default '0000-00-00 00:00:00', 
    `datecreated` datetime NOT NULL default '0000-00-00 00:00:00', 
    PRIMARY KEY (`id`) 
); 

CREATE TABLE `table3` (
    `id` INT(10) NOT NULL AUTO_INCREMENT, 
    `idchamps` VARCHAR(255) NOT NULL DEFAULT '', 
    `idprofil` VARCHAR(255) NOT NULL DEFAULT '', 
    `value` VARCHAR(255) NOT NULL DEFAULT '', 
    PRIMARY KEY(`id`) 
); 

所以我想選擇table1中所有的行,我想它從表2加入名稱,使其價值=從表3相對應。

我在想LEFT JOIN。但似乎只是將所有我的table2字段名稱添加到table1中......這很複雜......我希望你們都明白。

如果其在1個查詢不可能的......我想我有一個替代方案來獲取數據,但是這將讓我的生活的sooo容易得多......


目的:用戶有一個出口數據表格。這種形式他可以從table1和table2中爲每個條目選擇他想要的字段(帶有複選框)。那麼他們可以爲任何給定的領域提供過濾器。如id=1name LIKE %Somthing%來過濾結果。

複選框值保存在addfield [] $ this-> getFields()返回所有字段,因此它可以循環拋出過濾器後的值。

這裏是我的代碼生成的SQL(一類的一部分):

function getExportObject() { 
    // --> FOR EXPORT 
    //Building Query 
    $postdata = JRequest::get('post'); 
    $exportFields   = $postdata['addfield'];  //Table 1 
    $exportCustomFields = $postdata['addcfield'];  //table 2 name, table 3 value 
    $sqlSelect = ''; 
    //Main profil Fields... 
    foreach($exportFields as $key => $field) { 
     if ($sqlSelect!='') $sqlSelect .= ', '; 
     $sqlSelect .= '`'.$field.'`'; 
    } 

    //Add filters to the SELECT 
    //GET LIST OF ALL FIELDS.... 
    $sqlFilter = ''; 
    $loopFields = $this->getFields(); 
    foreach($loopFields as $key => $field) { 
     if (JRequest::getVar('filter_'.$field)!='') { 
      if ($sqlFilter=='') { $sqlFilter .= " WHERE "; } 
      else { $sqlFilter .= " AND "; } 

      switch(JRequest::getVar('filter_'.$field)) { 
       case 'EQUAL'    : $sqlFilter .= "`".$field."`='".JRequest::getVar('filter_val_'.$field)."'"; break; 
       case 'NOT_EQUAL'  : $sqlFilter .= "`".$field."`!='".JRequest::getVar('filter_val_'.$field)."'"; break; 
       case 'CONTAINS'   : $sqlFilter .= "`".$field."` LIKE '%".JRequest::getVar('filter_val_'.$field)."%'"; break; 
       case 'NOT_CONTAINS' : $sqlFilter .= "`".$field."` NOT LIKE '%".JRequest::getVar('filter_val_'.$field)."%'"; break; 
       default       : die('Utilisation invalid. SVP. essayez de nouveau.'); break; 
      } 
     } 
    } 
    //PUTTING IT ALL TOGETTHER 
    //"SELECT t1.*, t2.nom, t3.value FROM table1 t1 LEFT JOIN table3 t3 INNER JOIN table2 t2 ON t3.fieldname = t2.nom ON t1.id = t3.idprofil" 
    $query = "SELECT ".$sqlSelect." FROM `table1`".$sqlFilter; 
    echo $query; 
    exit(); 
    $this->_db->setQuery($query); 
    $exportList = $this->_db->loadObjectList(); 
    return $exportList; 
} //End of getExportObject() 

所以該功能適用​​於獲取值的表1。我havnt設置table2的任何代碼。但可以說,表2是可變因素以同樣的方式舉行,表1中,但後varibale addcfield []

+0

我想這裏缺少一些上下文。你能描述一下你的結果集是什麼樣的(在理想的世界裏)? – 2012-01-30 20:50:54

+0

tables1和table2如何關聯? table3.idprofile = table2.id? table3中的主鍵是否正確?你能舉一個你想要回來的例子嗎? – Cal 2012-01-30 20:50:59

+1

如何使用UNION繪製多個查詢? – Swadq 2012-01-30 20:51:03

回答

1

不是100%肯定我明白table2table3之間的關係,但我認爲你正在尋找的東西像這個:

編輯:根據評論中的反饋修改查詢。假設table2 id被添加到table3。

SELECT t1.*, t2.nom, t3.value 
    FROM table1 t1 
     LEFT JOIN table3 t3 
      INNER JOIN table2 t2 
       ON t3.table_2_id = t2.id 
      ON t1.id = t3.idprofil 
+0

table2保存表格3中保存的值的字段名稱 – StiGMaT 2012-01-30 20:55:05

+0

@StiGMaT'table2'和'table3'如何相互關聯?我在我的答案中做了一個最好的猜測。 – 2012-01-30 20:56:29

+0

這裏是字段名的值,例如:custom_1_28#1 = table2的id。我想im gona在表3中添加一個新字段,以便對table2有一個普通的id ...我的'fieldname'就是輸入的名字,當它的形式 – StiGMaT 2012-01-30 20:59:21

相關問題