diff --git a/source/attributeTableModel.cpp b/source/attributeTableModel.cpp index 894e36c..db906ae 100644 --- a/source/attributeTableModel.cpp +++ b/source/attributeTableModel.cpp @@ -385,16 +385,37 @@ void AttributeTableModel::loadPageData() QString strSQL = ""; bool isPublicGroup = SqlQueryExecutor::instance().isPublicAttributeGroup(m_connection, m_modelAttributeGroup.groupID); if(isPublicGroup) - strSQL = QString("SELECT attribute_id FROM basic.model_attribute_public WHERE attribute_group_id = %1 ORDER BY id ASC LIMIT %2 OFFSET %3") + /*strSQL = QString("SELECT attribute_id FROM basic.model_attribute_public WHERE attribute_group_id = %1 ORDER BY id ASC LIMIT %2 OFFSET %3") .arg(m_modelAttributeGroup.groupID) .arg(m_paginationInfo.entriesPerPage) + .arg((m_paginationInfo.currentPage - 1) * m_paginationInfo.entriesPerPage);*/ + strSQL = QString("SELECT attribute_id FROM basic.model_attribute_public AS map " + "INNER JOIN basic.attribute AS a ON map.attribute_id = a.id " + "WHERE attribute_group_id = %1 " + "AND a.attribute LIKE '%%2%' " + "ORDER BY map.id ASC LIMIT %3 OFFSET %4") + .arg(m_modelAttributeGroup.groupID) + .arg(m_filterChars_attributeType) + .arg(m_paginationInfo.entriesPerPage) .arg((m_paginationInfo.currentPage - 1) * m_paginationInfo.entriesPerPage); //利用短路机制,当attribute_group_id!=-1时,括号整体为false,需要进行内部条件判断,=-1时,整体为true,忽略整体,也就忽略了attribute_group_id的条件判断 - else strSQL = QString("SELECT attribute_id FROM basic.model_attribute WHERE model_type_id = %1 AND (attribute_group_id = %2 OR %2 = -1) ORDER BY id ASC LIMIT %3 OFFSET %4") + else + /*strSQL = QString("SELECT attribute_id FROM basic.model_attribute WHERE model_type_id = %1 AND (attribute_group_id = %2 OR %2 = -1) ORDER BY id ASC LIMIT %3 OFFSET %4") .arg(m_modelAttributeGroup.modelID) .arg(m_modelAttributeGroup.groupID) .arg(m_paginationInfo.entriesPerPage) - .arg((m_paginationInfo.currentPage - 1) * m_paginationInfo.entriesPerPage); + .arg((m_paginationInfo.currentPage - 1) * m_paginationInfo.entriesPerPage);*/ + strSQL = QString("SELECT attribute_id FROM basic.model_attribute AS map " + "INNER JOIN basic.attribute AS a ON map.attribute_id = a.id " + "WHERE model_type_id = %1 " + "AND (attribute_group_id = %2 OR %2 = -1) " + "AND a.attribute LIKE '%%3%' " + "ORDER BY map.id ASC LIMIT %4 OFFSET %5") + .arg(m_modelAttributeGroup.modelID) + .arg(m_modelAttributeGroup.groupID) + .arg(m_filterChars_attributeType) + .arg(m_paginationInfo.entriesPerPage) + .arg((m_paginationInfo.currentPage - 1) * m_paginationInfo.entriesPerPage); try { QSqlQuery query = SqlQueryExecutor::instance().executeSQL(m_connection, strSQL); @@ -404,8 +425,8 @@ void AttributeTableModel::loadPageData() attribute.id = query.value(0).toInt(); if(SqlQueryExecutor::instance().getAttributeInfo(m_connection, columns.join(", "), attribute)) { - if(!m_filterChars_attributeType.isEmpty() && !attribute.type.contains(m_filterChars_attributeType)) - continue; + // if(!m_filterChars_attributeType.isEmpty() && !attribute.type.contains(m_filterChars_attributeType)) + // continue; RowData data; data.values.append(attribute.type); @@ -504,7 +525,7 @@ void AttributeTableModel::updateTotalCount() if(m_modelAttributeGroup.modelID == -1) m_paginationInfo.totalEntries = SqlQueryExecutor::instance().getAllAttributeCount(m_connection, m_filterChars_attributeType); else - m_paginationInfo.totalEntries = SqlQueryExecutor::instance().getAttributeCount(m_connection, m_modelAttributeGroup.modelID, m_modelAttributeGroup.groupID); + m_paginationInfo.totalEntries = SqlQueryExecutor::instance().getAttributeCount(m_connection, m_modelAttributeGroup.modelID, m_modelAttributeGroup.groupID, m_filterChars_attributeType); m_paginationInfo.totalPages = totalPages(); }