Ben uskur Nasıl türetilmiş bir tablo seçebilirsiniz?

1 Cevap php

Ben bir uygulama için uskur PHP çerçevesinde v1.3 kullanıyorum ve ben Criteria nesnesini kullanarak türetilmiş bir tablo seçmek için bir yol bulamıyorum. Ben istiyorum SQL parçasıdır:

SELECT unioned_table.foo, quux.stuff, baz.more_stuff...
FROM
  quux
  INNER JOIN
  (SELECT foo, bar FROM table1 
    UNION
    SELECT foo, bar FROM table2
  ) AS unioned_table
   ON quux.field = unioned_table.foo
 INNER JOIN baz
   ON baz.blah = unioned_table.bar
 INNER JOIN ...
 WHERE conditions...

Gerçek SQL bundan daha karmaşık, ama bu sadece daha katıldı içerir.

Ne yazık ki SQL-kaçış tablo tanımını çalıştığı ama ben, Criteria::addAlias() kullanmak denedim. Sonunda bu şekilde SQL yazmaya çalışıyorum vazgeçti, ve (bu örnekte unisoned_table denir) bir görünüm yarattı.

Gelecek bu tabloya katılır eklemek çalıştı:

$c->addSelectColumn('unioned_table.foo');
$c->addSelectColumn(QuuxPeer::STUFF);
$c->addSelectColumn(BazPeer::MORE_STUFF);
// ...

$c->addJoin(QuuxPeer::FIELD, 'unioned_table.foo', Criteria::INNER_JOIN);
$c->addJoin(BazPeer::BLAH, 'unioned_table.bar', Criteria::INNER_JOIN);
// ...

$c->add(QuuxPeer::STUFF, $someval);
// ...

Ne yazık ki bu birleştirilen twice görünümünde sonuçları - bir iç qux ile katılmak gibi bir kez, ve bir kez çapraz olarak baz ile katılmak. Ben baz SELECT sütunu kaldırırsanız Tuhaf, ardından çapraz kaybolur katılın.

Herkes bunu nasıl olarak herhangi bir öneriniz var mı? Bu Criteria (vb, ekstra şartlar eklendi, sütunlar yerine) değiştirilmiş ya da bir doCount() aramada kullanılan gerekebilir gibi, sadece çıplak özel SQL kullanamazsınız.

1 Cevap

Bu düzen Criteria::addJoin() önemli olduğu ortaya çıkıyor; katılır değişen böylece okunması:

$c->addJoin(QuuxPeer::FIELD, 'unioned_table.foo', Criteria::INNER_JOIN);
$c->addJoin('unioned_table.bar', BazPeer::BLAH, Criteria::INNER_JOIN);

sorunu sabit.