ugrás a tartalomhoz

Sziasztok, ebben a lekérdezésben szeretnék segítséget kérni, ha valaki tudna, vagy javaslatott tenne hogyan írjam át, köszönöm

R6Ferenc · 2015. Aug. 4. (K), 21.07
public function current_user()
{
    //összes számla
    $result = $this->db->select('u.*, sum(a.advance) as advance, sum(p.price) as price')
                       ->from('advance a, products p, users u')
                       ->where('a.user_id = u.id')
                       ->where('p.user_id = u.id')
                       ->group_by('u.name','desc')
                       ->get();
    if($result->num_rows() > 0){
        return $result->result();        
    } else {
        return false; 
    }
}
 
1

Mi a kérdés?

Poetro · 2015. Aug. 4. (K), 21.35
Mi is a kérdés? Mit szeretnél elérni? Mi a probléma? Milyen rendszert használsz? Milyen hibaüzenetet kapsz? Mit próbáltál tenni a probléma megoldásáért?
2

azeretném az advance valamint

R6Ferenc · 2015. Aug. 4. (K), 21.40
azeretném az advance valamint a products táblából lekérni felhasználonként az előgek és a termékek összegét, azt kilistáztatni felhasználonként, a felhasználok meg az users táblában vannak, hibaüzenetet nem kapok, viszont teljesen összekeveri az összegeket, elég kezdő vagyok a programozásban ...
3

Kevés az infó

orionstar · 2015. Aug. 5. (Sze), 02.06
Jó lenne ha pontosabban megfogalmaznád a problémád körülményeit, mit szeretnél elérni...

Ránézésre ez CodeIgniter keretrendszernek tűnik...
Már rég foglalkoztam backenddel, de én mindenképp JOIN-okkal és belső lekérdezésekkel oldanám meg. Viszont eléggé a levegőben logónak érzem ezt az egészet, kéne több infó... A végén az a num rows vizsgálat feleslegesnek tűnik...

Ez alapján kicsit átírtam a kódod:

public function current_user()  
{
    $this->db
      ->select('u.*, processed_advances.advance_sum AS advance, processed_products.price_sum AS price')
      ->from('users AS u')
      ->join('
          (
            SELECT `user_id`, SUM(`advance`) AS advance_sum
            FROM advance
            GROUP BY `user_id`
          ) AS processed_advances
        ',
        'processed_advances.user_id = u.id',
        'left'
      )
      ->join('
          (
            SELECT `user_id`, SUM(`price`) AS price_sum,
            FROM products
            GROUP BY `user_id`
          ) AS processed_products
        ',
        'processed_products.user_id = u.id',
        'left'
      );

    $query = $this->db->get();

    return $query->result();
}
Valami SQL szakértő ha erre téved megmondhatná, hogy ez mennyire hatékony, mit lehetne változtatni stb... már ha megy egyáltalán, kipróbálni séma stb nélkül nem tudtam!
4

Szia, előre is köszönöm a

R6Ferenc · 2015. Aug. 5. (Sze), 11.12
Szia, előre is köszönöm a segítséged, de sajnos nem jó még így sem, az alábbi hibaüzenet jelenik meg:

Error Number: 1103

Incorrect table name ' ( SELECT '

SELECT `u`.*, `processed_advances`.`advance_sum` AS advance, `processed_products`.`price_sum` AS price FROM (`users` AS u) LEFT JOIN ` ( SELECT `user_id`, SUM(`advance`) AS advance_sum FROM advance GROUP BY `user_id` ) AS processed_advances ON `processed_advances`.`user_id` = `u`.`id` LEFT JOIN ` ( SELECT `user_id`, SUM(`price`) AS price_sum, FROM products GROUP BY `user_id` ) AS processed_products ON `processed_products`.`user_id` = `u`.`id`

Filename: C:\wamp\www\111\system\database\DB_driver.php

Line Number: 331

igen,Codeigniter rendszerről van szó, és amit el szeretnék érni, hogy ki tudjam listázni táblázatba a felhasználok jelenlegi áálásást, elólegét, elvitt termékek összegét, három táblám van,
users -> ebben van id és az ügyfél neve,
advance -> ebben id, user_id és advance, ebbe kerül alkalmanként rögzitésre ha az ügyfél előleget hoz be,
products -> id, user_id, price
5

Talán segít

orionstar · 2015. Aug. 5. (Sze), 12.02
Hmm, próbáld ki, hogy kiveszed az aposztrófjaimat... de van egy olyan érzésem az a baja, hogy CodeIgnitert 2-őt használsz és ott a join()-nak az első paraméter csak táblanév lehet, nem teljes lekérdezés.

Ebben az esetben frissíts CodeIgniter 3-ra, azzal kompatibilis a kód amit írtam. Ez annyiból áll, hogy letöltöd a 3-as verziót, kicseréled a system és az application/config mappákat és a gyökérben lévő index.php-t, átírod a controllerek, modellek, (ha van) library-k fájlnevét nagy kezdőbetűsre, ezek után állítsd be a jelenleg használtak szerint az application/config-ban a konfigurációs fájlokat és a gyökérben az index.php-t.

Vagy, ha maradnál a kettes verziónál, akkor el kell hagyni az CI "Active Record" használatát és át kell írni az egész lekérdezést natívra...
6

Szia, köszönöm, 2 -öt

R6Ferenc · 2015. Aug. 6. (Cs), 08.06
Szia, köszönöm, 2 -öt használok, probáltam ahogy írtad , de nem sikerült, most nekiesek és frissíttem 3 ra, esetleg lehetek még nagyon szemtelen és kérhetek még valamiben segítséget ?
7

Szia, most végeztem a

R6Ferenc · 2015. Aug. 6. (Cs), 12.10
Szia, most végeztem a frissítéssel és így már tökéletes a kód (a 18. sor végén benne maradt egy vessző, és azt töröltem), köszönöm a segítséged!
8

Nincs mit, a legjobbakat! :)

orionstar · 2015. Aug. 6. (Cs), 14.04
Nincs mit, a legjobbakat! :)
9

köszönöm, esetleg lehetek még

R6Ferenc · 2015. Aug. 6. (Cs), 14.22
köszönöm, esetleg lehetek még nagyon szemtelen és kérhetek még egy segítséget, tanácsot?
azt szeretném megoldani amennyiben lehetséges hogy ki tudjam listázni negyedéves kiadásokat és bevételeket
10

Negyedéves szűrés

orionstar · 2015. Aug. 6. (Cs), 16.18
Mi az adatbázis sémája a kiadás/bevétel tárolásnak?

Na ahol csinálsz egy lekérdezést, ott olyan where feltételt kell majd hozzáadnod, ahol leszűrsz a kívánt negyedév szerinti hónapokra pl. az első negyedév esetén:

$this->db
    ->where('MONTH(created_at) >=', 1)
    ->where('MONTH(created_at) <=', 4)
Ha két where-t hívsz így, egymás után, azt AND-del összekapcsolja, tehát azt az SQL-t kapod, hogy
WHERE MONTH(created_at) >= 1 AND MONTH(created_at) <= 4
11

két tábla volna: bevétel ->

R6Ferenc · 2015. Aug. 6. (Cs), 16.51
két tábla volna:

bevétel -> id, összeg, dátum
kiadás -> id, összeg, dátum

úgy szeretném listázni, hogy
2015 első negyedév - össz. bevétel - össz.kiadás
2015 második negyedév - össz. bevétel - össz.kiadás
és így tovább, magamtól csak annyira jutottam elméletben, hogy minden sorhoz írok külön lekérdezést ...
12

Ez már nehezebb

orionstar · 2015. Aug. 7. (P), 04.00
Ez már nehezebb, procedure használata nélkül nem tudom, hogy megoldható-e tisztán SQL-lel. Legegyszerűbb talán az lenne neked, ha lekérdezed az elérhető év-hónap kombinációkat valamelyik tábláról (SELECT YEAR(dátum) AS év, MONTH(dátum) as hónap ... GROUP BY YEAR(dátum), MONTH(dátum)), aztán két egymásba ágyazott ciklussal végigiterálsz rajta és minden hónaphoz lekérdezed a summázott összeget és hozzáadod egy változóban tárolt negyedéves adathoz, a kiadással ugyanígy. Viszont ez rohadt lassú lesz, akár több száz lekérdezést eredményezhet és nagyon nem elegáns megoldás :) A helyedben nekifeküdnék az SQL-nek inkább, konkrét megoldást tőlem ne várj, eltartana néhány órát amíg megoldom és ezt nem fogom rászánni! Talán valaki más itt a fórumon, de erre ne várj! ;)
13

rendben, megfogadom a

R6Ferenc · 2015. Aug. 7. (P), 06.16
rendben, megfogadom a tanácsod, nekiesek az SQl-nek, legalább tudom hogy lehetséges, köszönöm :)