سؤال

أحاول استخدام Zend_Db_Select لكتابة استعلام تحديد يبدو إلى حد ما كما يلي:

SELECT * FROM bar WHERE a = 1 AND (b = 2 OR b = 3)

ومع ذلك، عند استخدام مجموعة من Where() وorWhere()، يبدو من المستحيل استخدام التجميع الشرطي كما هو مذكور أعلاه.

هل هناك أي طرق أصلية في Zend Framework لتحقيق ما ورد أعلاه (دون كتابة الاستعلام الفعلي؟)

هل كانت مفيدة؟

المحلول

من الدليل (مثال 11.61.مثال على وضع أقواس في التعبيرات المنطقية)


// Build this query:
//   SELECT product_id, product_name, price
//   FROM "products"
//   WHERE (price < 100.00 OR price > 500.00)
//     AND (product_name = 'Apple')

$minimumPrice = 100;
$maximumPrice = 500;
$prod = 'Apple';

$select = $db->select()
             ->from('products',
                    array('product_id', 'product_name', 'price'))
             ->where("price < $minimumPrice OR price > $maximumPrice")
             ->where('product_name = ?', $prod);

نصائح أخرى

المرجع أعلاه رائع، ولكن ماذا لو كنت تلعب بالأوتار؟

هنا هو المثال أعلاه مع سلاسل ...

// Build this query:
//   SELECT product_id, product_name, price
//   FROM "products"
//   WHERE (product_name = 'Bananas' OR product_name = 'Apples')
//     AND (price = 100)

$name1 = 'Bananas';

$name2 = 'Apples';

$price = 100;

$select = $db->select()

->from('products',
                    array('product_id', 'product_name', 'price'))

->where("product_name = '" . $name1 . "' OR product_name = '" . $name2 . "'")

->where("price=?", $price);

أتمنى أن يساعد ذلك.استغرق مني بعض العبث لجعل الخيوط تعمل بشكل صحيح.

هتافات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top