Autor Zpráva
ann
Profil *
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'); 
akorát že to vypíše uplně všechno,a ještě k tomu mě to nevypíše shop name,title
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 *
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
count(*) + group by id
ann
Profil *
Alphard:
to ale bude platit pro celou proměnnou skladdb a nevyčtu vlastně name ani title ne?
juriad
Profil
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 *
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
Jaké hodnoty má řádek skladu v tabulce zobrazovat?
ann
Profil *
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
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 *
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;                                                     
     
    }
potom ve vzhledu dávám foreach skladDB as něco a pak jen vypisuju
<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
v template mě zobrazí všechny ID
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 *
tak už vyřešeno,
pro ostatní...chyběla mě tam čárka
mělo to bejt takto
SELECT *, COUNT(pocet) AS pocet

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: