Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [propel] nieco bardziej skomplikowane zapytanie, IF, User-Defined Variables
empathon
post
Post #1





Grupa: Zarejestrowani
Postów: 246
Pomógł: 31
Dołączył: 13.11.2006
Skąd: się znamy?

Ostrzeżenie: (0%)
-----


Od niedawna używam propel'a i jeszcze nie do końca orientuje się w jego możliwościach. Chciałbym wiedzieć czy jest możliwość przerobienia poniższego zapytania tak by w propelu uzyskać obiekty. Przerobić Peer klasy?
  1. SELECT drop_rate.MIN,
  2. drop_rate.MAX,
  3. (@CHANCE:=IF((((drop_rate.ITEM_CHANCE*4)*(drop_rate.GROUP_CHANCE*4))/100 > 100), 100, (drop_rate.ITEM_CHANCE*4)*(drop_rate.GROUP_CHANCE*4))/100)) AS PERC,
  4. itemdata.CLIENT_NAME,
  5. CEIL(1/(@CHANCE/100)) AS FRAC
  6. FROM drop_rate, itemdata WHERE drop_rate.NPC_ID=43 AND itemdata.id=drop_rate.ITEM_ID


Wiem, że mogę wykonać kożystajac z propela taka kwerendę ale uzyskam wtedy result set nie obiekty ( tylko, czy da się jakoś inaczej ? )

Z góry dziękuję za pomoc

Edit:

Na kanale #symfony powiedziano mi, że takie rzeczy tylko w erze i propel tego nie potrafi. Co najwyżej żeby otrzymać obiekty można postąpić tak.
  1. <?php
  2. $query = "
  3. SELECT 
  4. itemdata.ID AS id,
  5. drop_rate.MIN AS min, 
  6. drop_rate.MAX AS max,
  7. (@CHANCE:=IF((((drop_rate.ITEM_CHANCE*1)*(drop_rate.GROUP_CHANCE*1))/100 > 100), 100, ((drop_rate.ITEM_CHANCE*1)*(drop_rate.GROUP_CHANCE*1))/100)) as PERC,
  8. itemdata.CLIENT_NAME AS client_name,
  9. CEIL(1/(@CHANCE/100)) as frac
  10. FROM 
  11. drop_rate, 
  12. itemdata 
  13. WHERE 
  14. drop_rate.NPC_ID = 43 
  15. AND 
  16. itemdata.id = drop_rate.ITEM_ID
  17. ";
  18.  
  19. $connection = Propel::getConnection();
  20. $statement = $connection->prepareStatement($query);
  21. $result = $statement->executeQuery();
  22.  
  23. $items = array();
  24.  
  25. while ($result->next())
  26. {
  27. $id = $result->getInt('id');
  28.  
  29. $item = ItemdataPeer::retrieveByPk($id);
  30.  
  31. if ($item instanceof Itemdata)
  32. {
  33. $items[] = $item;
  34. }
  35. }
  36. ?>


Niestety generuje to tyle zapytań ile otrzymamy rezultatów a i do FRAC i PERC nie ma dostępu przez get ( trzeba dopisać coś w klasach bazowych? ) Co prawda można to zminimalizować do 2 zapytań przez retriveByPK(array()) ale chyba jednak daruje sobie w tym przypadku obiekty. To tak gdyby ktoś w przyszłości miał taki problem (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Edit:

Da się jednak normalnie. Dodając warunek do criteria można tam wstawić dowolne wyrażenie czyli również warunki. Do wyciągnięcia obiektów służy metoda hydrate.

Ten post edytował empathon 24.03.2007, 16:53:14
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 21:22