it-swarm.asia

استخدام جملة IN في db_query

لا يمكنني معرفة كيفية إضافة جملة IN في الاستعلام الخاص بي باستخدام العناصر النائبة.

أريد أن يكون شيئًا مثل:

$nids = array(1, 2, 3);
$result = db_query('SELECT * FROM {node} WHERE nid IN :nids', array(':nids' => $nids));

لا يمكن العثور على أي وثائق في هذه المهمة البسيطة. ما هي الطريقة المناسبة لتحقيق ذلك؟

37
Olof Johansson

أنت تفتقد الأقواس.

جرب هذا:

$nids = array(1, 2, 3);
$result = db_query('SELECT * FROM {node} WHERE nid IN (:nids)', array(':nids' => $nids));

لمزيد من المعلومات ، راجع http://drupal.org/node/310072 ، وخاصة الفصل الخاص بمصفوفات العناصر النائبة:

صفائف العنصر النائب

تتضمن طبقة قاعدة بيانات دروبال ميزة إضافية للعناصر النائبة. إذا كانت القيمة التي تم تمريرها للعنصر النائب عبارة عن صفيف ، فسيتم توسيعها تلقائيًا إلى قائمة مفصولة بفواصل كما هو الحال بالنسبة للعنصر النائب المقابل. وهذا يعني أن المطورين لا يحتاجون إلى القلق بشأن حساب عدد العناصر النائبة التي سيحتاجون إليها.

يجب أن يجعل المثال هذا السلوك أوضح:

<?php
// This code:
db_query("SELECT * FROM {node} WHERE nid IN (:nids)", array(':nids' => array(13, 42, 144));

// Will get turned into this prepared statement equivalent automatically:
db_query("SELECT * FROM {node} WHERE nid IN (:nids_1, :nids_2, :nids_3)", array(
  ':nids_1' => 13, 
  ':nids_2' => 42, 
  ':nids_3' => 144,
));

// Which is equivalent to the following literal query:
db_query("SELECT * FROM {node} WHERE nid IN (13, 42, 144)");
?>
46
Berdir

مقابل Drupal 8

استعلام الكيان:

$query = \Drupal::entityTypeManager()->getStorage('entity_type')->getQuery();
$query->condition('field/property', [1, 2, 3], 'IN');
$ids = $query->execute();

استعلام Sql (تحديد) ، هو نفسه بشكل أساسي لأنواع الاستعلام الأخرى.

$query = \Drupal::database()->select('table', 't');
$query->condition('column', [1, 2, 3], 'IN');
...

مقابل Drupal 7

انظر إجابة بردير.

مقابل Drupal 6

يمكنك القيام بذلك على النحو التالي:

$nids = array(1, 2, 3);
$placeholders = db_placeholders($nids);
$result = db_query("SELECT * FROM {node} WHERE nid IN ($placeholders)", $nids);

هناك حاجة إلى db_placeholders في Drupal 6 التي ستنشئ سلسلة تحتوي على العناصر النائبة اللازمة لمجموعة القيم المعطاة. Drupal 7 يعالج كل هذا داخليًا كما يصف Berdir .

18
googletorp

استخدام API لقاعدة البيانات في Drupal 7

إليك كيفية استخدام db_select () بدلاً من db_query () لنفس النتائج.

$nids = array(1, 2, 3);
$query = db_select('node', 'n')
  ->fields('n')
  ->condition('n.nid', $nids, 'IN')
  ->execute();
$nodes = $query->fetchAll();
10
tyler.frankenstein

دروبال 6 إذا كان المصفوفة الخاصة بك تحتوي على سلاسل ، فعليك إخبار db_placeholders ()

$colours = array('red', 'yellow', 'blue');
$placeholders = db_placeholders($colours,'text');
$result = db_query("SELECT * FROM {bricks} WHERE colour IN ($placeholders)", $colours);
1
Peter Cook