Saya mencoba untuk menulis suatu kondisi ke klausa WHERE SQL yang memaksa perbandingan kolom ke variabel untuk dibandingkan dalam huruf kecil. Namun fungsi addExpression tidak menyelesaikan ini (karena itu menempatkan ekspresi dalam pemilihan bidang, bukan klausa di mana.
Inilah yang saya coba:
$category = 'mobile wifi';
$query = db_select('taxonomy_term_data', 'ttd')
->fields('ttd', array('tid'));
$query->innerJoin('taxonomy_vocabulary', 'tv', 'ttd.vid = tv.vid');
$query->addExpression("LOWER(ttd.name) = $category");
$result = $query->condition('machine_name', 'images_cat', '=')
->execute()
->fetchAssoc();
Dan ini:
$category = 'mobile wifi';
$query = db_select('taxonomy_term_data', 'ttd')
->fields('ttd', array('tid'));
$query->innerJoin('taxonomy_vocabulary', 'tv', 'ttd.vid = tv.vid');
$result = $query->condition('machine_name', 'images_cat', '=')
->condition('LOWER(ttd.name)', $category, '=')
->execute()
->fetchAssoc();
Yang kedua menjadi tidak valid dan yang pertama menyebabkan masalah yang saya sebutkan di atas. Ada pemikiran atau saran?
Terima kasih, Patrick
Penggunaan
LOWER()
dianggap lambat di MySQL. Itu tidak perlu juga karenaLIKE
dalam Database API Drupal (DBTNG) tidak sensitif huruf, setidaknya ketika tabel MySQL Anda dikonfigurasi untuk menggunakan salah satu dari kumpulan * _ci. Instalasi standar MySQL menggunakan * utf8_general_ci * dan begitu juga Drupal.Jadi, Anda hanya perlu menggunakan kondisi LIKE:
Lihat Klausa Bersyarat untuk penjelasan komprehensif.
BTW: Driver basis data berbasis DBTNG bertanggung jawab untuk mengimplementasikan SEPERTI kasus yang tidak sensitif. PostgreSQL misalnya menggunakan ILIKE daripada LIKE yang ditangani di include / database / pgsql / database.inc .
sumber
Anda masih dapat menggunakan addExpression.
Sumber daya: Contoh kueri SQL di Drupal 7
sumber