Autor | Zpráva | ||
---|---|---|---|
ann Profil * |
#1 · Zasláno: 29. 5. 2014, 00:52:19
zdravím,
chci se vás zeptat kde mám chybu? má to dělat toto mám 3 tabulky shop - id (id shopu) sklad - id_user,id_shop (id uživatele a id shopu) users - id potřebuji je propojit tak,abych vyčetl všechny položky ve skladu,s mím ID users a abych je mohl nějak vypsat tak je propojit i se shopem muj navrh vypadá takto ('SELECT shop.id,shop.name,shop.title,sklad.id_shop,sklad.id_user,users.id FROM shop INNER JOIN sklad ON shop.id = sklad.id_shop INNER JOIN users ON sklad.id_user = users.id WHERE users.id=1 AND sklad.id_user=1'); takže tam jsou jen nějaký čísla,a nevím odkud vlastně jsou. jak by to mělo vypadat aby to fungovalo? děkuji |
||
ann Profil * |
#2 · Zasláno: 29. 5. 2014, 11:43:59
tak jsem to už vyřešil..
akorát bych potřeboval ještě pomoct.. pokud tam budu mít např 10x ve skladu s ID 1,tak aby to ukázalo jen 1x a potom vypsat že to tam mám 10x jako text.. nenapadá mě jak by se to takhle dalo udělat.. ps: ten select jsem vyřešil takto $userDB = DB::query('SELECT * FROM users WHERE id=?',array($userid)); $skladDB = DB::query('SELECT * FROM sklad INNER JOIN shop ON sklad.id_shop = shop.id WHERE sklad.id_user=?', array($userid)); |
||
Alphard Profil |
#3 · Zasláno: 29. 5. 2014, 11:45:58
count(*) + group by id
|
||
ann Profil * |
#4 · Zasláno: 29. 5. 2014, 11:55:31
Alphard:
to ale bude platit pro celou proměnnou skladdb a nevyčtu vlastně name ani title ne? |
||
juriad Profil |
#5 · Zasláno: 29. 5. 2014, 12:02:26
Databáze neumí obecně scuknout několik řádek do jedné. Je sice možné použít GROUP_CONCAT, ale to také má své problémy.
Čemu vadí, že vytáhneš jednu informaci vícekrát? Pokud si záznamy seřadíš podle id, tak budou dokonce za sebou a v PHP je zpracovat najednou. Nebo můžeš položit více dotazů: http://php.vrana.cz/srovnani-dotazu-do-zavislych-tabulek.php |
||
ann Profil * |
#6 · Zasláno: 29. 5. 2014, 12:09:36
no,já to mám ve funkci,takže na konci je pak return $skladDB;
potom jí předávám do template a tam jí házím do foreach takže v template to mám pak <? foreach($store as $sklad){ ?> <p class="title"><?= $sklad['name'] ?></p> <p class="title1"><?= $sklad['title'] ?></p> <? } ?> takže já si nemůžu dovolit mít víc proměnných ve funkci |
||
juriad Profil |
#7 · Zasláno: 29. 5. 2014, 12:13:18
Jaké hodnoty má řádek skladu v tabulce zobrazovat?
|
||
ann Profil * |
#8 · Zasláno: 29. 5. 2014, 12:17:32
potřebuju vyčíst tyto hodnoty
sklad - id_user,id_shop (id uživatele a id shopu) pokud mám těch hodnot id_shopu víc tak aby se zobrazil pouze jednou a potom vypsal kolik tam mám těch hodnot v číslách. neboli pokud tam mám 2x tejný id_shopu tak aby se zobrazil v číslici 2x a aby se mě zobrazily pouze ty hodnoty ve skladu se stejným id_users jako mám já |
||
juriad Profil |
#9 · Zasláno: 29. 5. 2014, 12:23:13
Chápu tedy, že chceš pouze tři sloupce (dva obsahující idečka a jeden obsahující počet). Nějak mi ta tabulka nepřijde užitečná, ale třeba víš, co děláš.
SELECT id_user, id_shop, COUNT(*) pocet FROM sklad GROUP BY id_shop WHERE id_user = $mojeId |
||
ann Profil * |
#10 · Zasláno: 29. 5. 2014, 12:36:07
no,nějak takhle jsem to myslel,akorát trochu jinak
mám 3 tabulky který spojuju takhle (takhle mě to momentálně funguje) public function store(){ $user=$_SESSION['user_info']; $userid=$user['id']; //ID uživatele //shop - id //sklad - id_user,id_shop //users - id $userDB = DB::dotazJeden('SELECT * FROM users WHERE id=?',array($userid)); $skladDB = DB::dotazVsechny('SELECT * FROM sklad INNER JOIN shop ON sklad.id_shop = shop.id WHERE sklad.id_user=?', array($userid)); return $skladDB; } <p class="title"><?= $sklad['name'] ?></p> //jmeno z tabulky shop <p class="title1"><?= $sklad['title'] ?></p> //title z tabulky shop tohle mě vypíše uplně všechno co má ten uživatel koupený dám příklad v db sklad bude tohle id id_shop 1 2 2 2 3 2 4 1 a já potřebuju aby se 1,2,3 spojily a zobrazil se pouze jeden a v template by se zobrazil pouze jeden a dole napsal že jich je 3x v databázi. Snad jsi to pochopil.Děkuji za rady |
||
ann Profil * |
#11 · Zasláno: 29. 5. 2014, 19:47:46
tak už vyřešeno,
pro ostatní...chyběla mě tam čárka mělo to bejt takto SELECT *, COUNT(pocet) AS pocet |
||
Časová prodleva: 10 let
|
0