Propel ORM:按字段排序



我正试图用Propel 1.6 的自定义"订单依据"进行查询

select * from myObject ORDER BY FIELD(id, 3, 11, 7, 1)

这不起作用:

myObjectQuery::create()
    ->orderById($someIds)
    ->find()

我该怎么办?

$ids = array(3, 11, 7, 1);
$cids = implode(',', $ids);
myObjectQuery::create()
    ->addAscendingOrderByColumn("FIELD (tableName.id, {$cids})")
    ->find()

您可以按照所需的顺序堆叠订单:

myObjectQuery::create()
    ->orderByField1
    ->orderbyField3('desc')
    ->orderbyField2
    ->find()

试试看。

更新2:

$con = Propel::getConnection();
$query = 'SELECT COUNT(t1.user) AS users, t1.choice AS lft, t2.choice AS rgt
  FROM choice t1 iNNER JOIN choice t2 ON (t1.user = t2.user)
  WHERE t1.choice IN (?, ?) AND t2.choice IN (?, ?)
  GROUP BY t1.choice, t2.choice';
$stmt = $con->prepare($query);
$stmt->bindValue(1, 'foo');
$stmt->bindValue(2, 'bar');
$stmt->bindValue(3, 'baz');
$stmt->bindValue(4, 'foz');
$res = $stmt->execute();

在您的情况下,我会建立$con,创建一个查询来获得您的值列表,然后使用for循环来分配$stmt->bindValue(#,#),然后执行。

$ids = array(3, 11, 7, 1);
$cids = implode(',', $ids);
myObjectQuery::create()
    ->orderBy("FIELD(id, {$cids})")
    ->find()

最新更新