2009-12-08 8 views
4

Je vous écris une requête en utilisant Propel ORMPropel ORM dont MAX dans les critères

La requête est de la forme:

select * from some_table where some_table.created_at = (SELECT MAX(some_table.created_at) from some_table); 

Je suis arrivé jusqu'ici:

$c = new Criteria(); 
$c->addSelectColumn('MAX('.self::CREATED_AT.')'); 

Tout le monde sait comment utiliser Propel pour faire cela, pour me sauver en écriture RAW SQL?

Répondre

1

Essayez:

$c = new Criteria(); 
$c->add(SomeTable::CREATED_AT, '(SELECT MAX('.SomeTable::CREATED_AT.') FROM some_table)', Criteria::CUSTOM); 
3

Si vous voulez jhust savoir comment ajouter des instructions WHERE valeurs, la solution par @prodigitalson devrait fonctionner, mais je me demande pourquoi vous faites cette façon en premier lieu par rapport juste:

$recs = SomeTableQuery::create()->orderByCreatedAt()->findOne(); 

... qui vous obtiendra le dernier enregistrement créé. de travailler, de sorte que le travail a été autour de cette> withColumn (MAX (itemrevisionID) ') - -> orderByitemrevisionID ('desc')

+0

cela m'a aidé merci. Je cherchais aussi à obtenir la valeur MAX d'une certaine colonne mais votre méthode fonctionne à merveille. Commandez simplement cette colonne desc et findone. Merci encore. – azzy81

+0

Bien sûr. Comme je l'ai dit, je voulais juste mentionner une solution de rechange possible au problème de l'entreprise par rapport à la façon d'utiliser 'MAX()'. – jakerella

0

Je ne pouvais pas pour moi:

MyTable::create() 
->select('max_id') 
->addAsColumn('max_id', 'MAX(id)') 
->findOne(); 

find() retourne une collection d'objets utiliser si findOne()

addAsColumn() retourne simplement la colonne sélectionnée.

0

De cette façon, ne figure pas - ceci marche

Questions connexes