У сьомому друпалі для роботи з базою даних можна використовувати спеціальне API. Його переваги-це: простота написання коду, кроссплатформенность написаних запитів, зведення до мінімуму помилок. З особистого досвіду: було написано близько 10 складних самописних модулів, написаних з використанням DataBase API Drupal 7, і працюють на MySql. Після перенесення сайту на MsSql, з використання технології Microsoft Azure - треба було внести дрібні поправки всього в кілька запитів, а не переписувати по 10-20 запитів в кожному модулі. Приклади роботи в шостій версії Drupal розглядати не будемо, тільки для 7. Спочатку подивимося на основні методи, а далі вже Рассотрім повноцінні запити:
Пояснення: всім цим чотирьом функціям в як перший аргумент передається назва таблиці, без префікса. У першому випадку, з вибіркою, другим аргументом вказується псевдонім даний таблиці, він обов'язковий навіть при вибірці з однієї таблиці. Вказуйте будь-хто, наприклад перша буква в назві таблиці.
Це заміна звичного вам where.
За замовчуванням знак рівності годі й ставіть.Но якщо потрібно використовувати оператор більше, менше, менше або дорівнює і т.п. - замість знака "=" ставите ">". наприклад. Але і звичний where ніхто не запрещал.Іспользуется так, тут простіше.
У поясненні, думаю, не потребує. Вибірка полів, оператор fields:
Ось тут і вказується псевдонім, про який ми говорили раніше. Сортування:
Підрахунок кількість рядків:
Умови в запиті:
Вибірка з декількох таблиць-он же join
Ось в основному це всё.Теперь як це все працює.
Ось в принципі і все. Оператор having, наприклад, теж дуже легко відпрацьовується. Оператор limit. Замінений на range
Я наведу приклад кількох реальних запитів, щоб на прикладі вам було зрозуміло як все це діє: Проста вибірка даних:
Порадьте як уникнути конфлікту в БД.
В одній базі містяться таблиці Друпал і форуму phpbb. Таблиці з різними префіксами. Підключатися до бази безпосередньо - ламерство.
Для різнойменних таблиць працює конструкція в settings.php
'Driver' => 'mysql',
'Prefix' => array (
'Default' => 'dr7_',
'Table1' => 'phpbb_',
'Table2' => 'phpbb_',
)
Але є 2 таблиці users. У запитах префікси не вказуються, відповідно має місце конфлікт однойменних таблиць.
Як це можна вирішити?
Проблема вирішена.
Використовував уявлення mysql
Хороші приклади, Дякую!
Добрий день.
У вас помилка, в тексті ви пишете що "Оператор limit. Замінений на range", а в прикладі використовуєте "limit".
Дякую за статтю!