Для MySQL вы можете напрямую помещать условия в функцию SUM()
, и она будет оценена как Boolean 0
или 1
, и вы можете иметь свой счет на основе ваших критериев, не используя IF/CASE
SELECT
company_name,
SUM(action = 'EMAIL')AS Email,
SUM(action = 'PRINT' AND pagecount = 1)AS Print1Pages,
SUM(action = 'PRINT' AND pagecount = 2)AS Print2Pages,
SUM(action = 'PRINT' AND pagecount = 3)AS Print3Pages
FROM t
GROUP BY company_name
DEMO
Оптимизированный код для передачи данных из RecyclerView в Activity:
Это код адаптера:
Я не использовал синтетический Kotlin и из-за проблемы использовали представление в onBindViewHolder()
, каждый раз, когда оно извлекает представление и показывает его, и это не лучшая практика, мы используем ViewHolder только для достижения этой цели и достижения кэширования. Посмотрите, как я делаю это во внутреннем классе.
Для оптимизированного кода я использовал эту прекрасную библиотеку. Anko - это библиотека Kotlin, которая делает разработку приложений для Android быстрее и проще. Он делает ваш код чистым и легким для чтения, а также позволяет забыть о неровностях Android SDK для Java.
class TreeAdapter(private val listSurveyData: List<Tree>, val context: Context) : RecyclerView.Adapter<TreeAdapter.TreeViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int):
TreeViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_layout_tree, parent, false)
return TreeViewHolder(view)
}
override fun getItemCount(): Int = listSurveyData.size
override fun onBindViewHolder(holder: TreeViewHolder, position: Int) {
holder.setUpViewHolder(listSurveyData[position])
}
inner class TreeViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
private val txtSpeciesName: TextView = itemView.txt_speciesName
private val ctlContainer: ConstraintLayout = itemView.ctl_container
fun setUpViewHolder(tree: Tree) {
txtSpeciesName.text = tree.species
ctlContainer.setOnClickListener {
context.startActivity<MainActivity>(SURVERY_DATA_KEY to tree)
}
}
}
}
Кроме того, как это использовать!
В разделе «Действия: также расширяйте класс данных Tree с помощью Serializable!
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val tree = intent.getSerializableExtra(SURVERY_DATA_KEY) as Tree
}
}