好吧,所以我有一個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=1
或name 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 []
我想這裏缺少一些上下文。你能描述一下你的結果集是什麼樣的(在理想的世界裏)? – 2012-01-30 20:50:54
tables1和table2如何關聯? table3.idprofile = table2.id? table3中的主鍵是否正確?你能舉一個你想要回來的例子嗎? – Cal 2012-01-30 20:50:59
如何使用UNION繪製多個查詢? – Swadq 2012-01-30 20:51:03