| | |
| Stránka: 1 z 1
| [ Príspevkov: 17 ] | |
Autor | Správa |
---|
Registrovaný: 22.03.07 Prihlásený: 04.07.14 Príspevky: 344 Témy: 97 |
Nazdarek. Potreboval by som poradit. Mam spravene dve tabulky. V tabulke1 mam id, mena, krajinu uzivatelov atd. a v tabulke2 mam id_uzivatela (zhodne s ID z tabulky1) , id_albumu a pod. No a potrebujem spravit vyber z tabuliek tak, aby mi pri zadani podmienky napr. krajina vybralo z tabulky2 id_albumu, ale tak aby mi od kazdeho uzivatela vybralo len jeden album (posledny, napr.podla casu): Skusal som to takto:
Kód: select tabulka1.id, tabulka1.krajina, tabulka2.id_uzivatela, COUNT(tabulka2.id_albumu) AS numrows from tabulka1 where id_uzivatela in (select id_uzivatela from tabulka2 group by id_uzivatela having count(*) <=1) left join tabulka2 on rtabulka1.id = tabulka2.id_uzivatela Lenze takto to vobec nefunguje. Totiz potrebujem mat zachovane to COUNT(id_albumu) AS numrows kvôli strankovaniu. Jedniny sposôb ako mi to islo bolo: Kód: select COUNT(id_albumu) AS numrows from tabulka2 where id_uzivatela in (select id_uzivatela from tabulka2 group by id_uzivatela having count(*) <=1)
Lenze ako nahle som k tomu pripojil dalsiu tabulku, tak to prestalo fungovat. Neviete mi niekto poradit ako by mal spravne vyzerat ten zapis?
|
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 |
from tabulka1 where ... left join? Pozri si syntax select, takto to určite nespravíš
where až na koniec v tomto prípade
_________________ neříkejte, že něco nejde udělat, protože se vždycky najde nějaký blbec, co neví, že to nejde – a udělá to! |
|
Registrovaný: 22.03.07 Prihlásený: 04.07.14 Príspevky: 344 Témy: 97 | |
Registrovaný: 04.04.07 Prihlásený: 27.06.21 Príspevky: 532 Témy: 35 Bydlisko: Bratislava | Napísal djsulo: 03.11.2008 10:59 | |
|
Kód: select t1.id, t1.krajina, t2.id_uzivatela, COUNT(t2.id_albumu) AS numrows from t1 left join t2 on t1.id = t2.id_uzivatela where id_uzivatela in (select id_uzivatela from t2 group by id_uzivatela having count(*) <=1)
myslel si to takto nejak? neskusal som to, ale join musis mat pred where.
_________________ CPU: AMD Phenom II 940 QUAD X4 BE AM2+, chladic: Arctic Cooling Freezer 64 Pro, RAM: 4GB DDR2 800MHz PC6400, MB: M2N-E SLI, VGA: RX 4870 GAINWARD HD4870 1GB, HDD: WD 1TB, Zdroj: CORSAIR 750W TX |
|
Registrovaný: 22.03.07 Prihlásený: 04.07.14 Príspevky: 344 Témy: 97 | Napísal autor témy newboy1: 03.11.2008 11:26 | |
|
No skusil som to takto, ale stale mi vypisuje:
Error, query failed Neviem v com by mohol byt problem...
Ale rozmyslal som, ze to spravim inac..Len neviem ci to je aj spravne.. V podstate ja pre strankovanie potrebujem zistit, kolko "riadkov" sa mi vrati z Tabulky. Takze Select by som urobil takto:
Kód: $result = mysql_query("select t1.meno, t1.krajina, t2.id_albumu from t2 join (select id_uzivatela, max(cas) as cas from t2 group by id_uzivatela) as nejvyssi on t2.id_uzivatela = nejvyssi.id_uzivatela and t2.cas = nejvyssi.cas left join t1 on t2.id_uzivatela = t1.id"); A potom by som len vlastne na strankovanie pouzil len: Kód: $riadkov = mysql_num_rows($result); $maxPage = ceil($riadkov/$rowsPerPage);
Takto som to aj skusal a ide to, len neviem, ci je to aj spravne.
|
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 |
naozaj si pozri syntax selectu, pozri príručku mysql.
Máš tam 2x FROM. To už načo?
_________________ neříkejte, že něco nejde udělat, protože se vždycky najde nějaký blbec, co neví, že to nejde – a udělá to! |
|
Registrovaný: 22.03.07 Prihlásený: 04.07.14 Príspevky: 344 Témy: 97 | Napísal autor témy newboy1: 05.11.2008 13:11 | |
|
No to som uz opravil/vyriesil.. Ale teraz mam trocha iny problem. Potreboval by som si urobit funkciu, ktora mi vypise data z tabulky. Ide o nazvy albumov, ktorych moze byt viac od jedneho uzivatela. Mam nieco take:
Kód: function vypis($r) { while ($udaje = mysql_fetch_array($query)) { $r=$udaje['nazov']; echo "$r"; $r++; } } vypis ($r);
Lenze vypisuje mi chybove hlasenie:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL ..
A neviem ako to nahradit, aby mi to jednoducho vypisalo v tej funkcii vsetky nazvy.. Neviete mi poradit??
|
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 |
fetchuje sa vysledok, nie query.
Kód: $query = "SELECT * FROM tabulka"; $result = mysql_query($query); while($row = mysql_fetch_assoc($result)){ echo $row['stlpec']; }
_________________ neříkejte, že něco nejde udělat, protože se vždycky najde nějaký blbec, co neví, že to nejde – a udělá to! |
|
Registrovaný: 22.03.07 Prihlásený: 04.07.14 Príspevky: 344 Témy: 97 | Napísal autor témy newboy1: 05.11.2008 14:28 | |
|
No aj ked som to upravil takto tak, aj tak mi to vypisuje chybove hlasenie.
Jednoducho, akonahle dam do funkcie :
Kód: function vypis() { while ($udaje = mysql_fetch_assoc($result)) { echo $udaje['stlpec']; } }
akykolvek argument(mysql_fetch_assoc,mysql_fetch_array,mysql_fetch_row a pod.), tak mi to vypise chybu..Ako mam teda napisat tu funkciu, aby mi vypisalo vsetky nazvy z tabulky?
|
|
Registrovaný: 29.10.07 Prihlásený: 27.10.23 Príspevky: 1395 Témy: 30 Bydlisko: Bratislava |
skus trochu postudovat zaklady php. problem bude ze v tej funkcii nevidis $result. posielas ho tam? je to globalna premenna?
_________________ PC: OS: Windows 11 (64bit) CPU: AMD Ryzen 5 3600 GPU: ASUS TUF RTX3060Ti 8GB RAM: 16GB DDR4-3200MHz Kingston Fury MB: ASUS TUF Gaming B550M WIFI SSD: 1000GB PCIe M.2 NVME Mobil: Xiaomi POCO F2 PRO |
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 |
function vypis() {
global $result;
...
_________________ neříkejte, že něco nejde udělat, protože se vždycky najde nějaký blbec, co neví, že to nejde – a udělá to! |
|
Registrovaný: 22.03.07 Prihlásený: 04.07.14 Príspevky: 344 Témy: 97 | Napísal autor témy newboy1: 05.11.2008 14:40 | |
|
OK..Tak tu dam cely kod:
Prvykrat som to skusal takto:
Kód: $query = "select nazov from tabulka where id_uzivatela='{$zaznam['id_uzivatela']}'"; $result = mysql_query($query); function pokus() { while($row = mysql_fetch_assoc($result)){
echo $row['nazov_albumu']; } } pokus(); Vypisalo mi to chybove hlasenie. Druhykrat som to cele dal do funkcie: Kód: function pokus() { $query = "select nazov from tabulka where id_uzivatela='{$zaznam['id_uzivatela']}'"; $result = mysql_query($query); while($row = mysql_fetch_assoc($result)){
echo $row['nazov_albumu']; } } pokus();
Takto to uz nevypisalo vobec nic...
|
|
Registrovaný: 17.10.08 Prihlásený: 15.12.08 Príspevky: 24 Témy: 4 | Napísal pire: 05.11.2008 20:08 | |
|
niesom si isty ale takto by to neslo ?
Kód: function pokus($result) { while($row = mysql_fetch_assoc($result)){
echo $row['nazov_albumu']; } } echo pokus($result);
|
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 |
newboy, v tom druhom pokuse pre zmenu nemáš $zaznam, daj si global $zaznam.
Pomohlo by ti, keby si si nastavil niekde na začiatku error_reporting(E_ALL|E_STRICT), ale pozor, keď to nasadíš naostro na web, tak to musí ísť preč
_________________ neříkejte, že něco nejde udělat, protože se vždycky najde nějaký blbec, co neví, že to nejde – a udělá to! |
|
Registrovaný: 22.03.07 Prihlásený: 04.07.14 Príspevky: 344 Témy: 97 | Napísal autor témy newboy1: 06.11.2008 13:19 | |
|
rooobertek..Mal si pravdu s tym $zaznam. Jednoducho mi ta funkcia nebrala v dopyte podmienku Kód: where id_uzivatela= $zaznam['id_uzivatela'] . Riesenie bolo jednoduche. stacilo do funkcie pridat $zaznam Cize na zaciatok dat : Kód: function pokus($albumy, $zaznam) { ...... }
Ja neviem ci to je len moj problem, alebo to je nepisane pravidlo pre vsetkych, ale vzdy ked mi vyskoci nejaky problem, tak nakoniec zistim, ze je to len mala/banalna chyba ktora vznikla viac menej mojou nepozornostou. Napr. Aj teraz. Keby som si hned na zaciatku overil, ci mi prenasa podmienku where id_uzivatela= $zaznam , nemusel som zabit takmer cely den a vypisovat sem do fora..
|
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 |
To je ten lepší prípad. Horšie je ak ti vyhodí nejakú všeobecnú chybu ako internal server error 500 a rieš si... zistíš, ako spraviť na to nejakú záplatu, ale netušíš, prečo sa to tak deje
_________________ neříkejte, že něco nejde udělat, protože se vždycky najde nějaký blbec, co neví, že to nejde – a udělá to! |
|
Registrovaný: 21.02.07 Prihlásený: 21.02.10 Príspevky: 3984 Témy: 96 |
ja osobne odporúčam pri vypisovaní chýb:
pokiaľ píše Internal Error 500 - skontrolovať bodkočiarky, zátvorky, premenné
Pokiaľ však sa nerobí to čo má ... tak skúšam vypísať konkretné reťazce alebo prememnné
keď sa aj tak nedarí tak pomáha klasické komentovanie ...
|
|
| Stránka: 1 z 1
| [ Príspevkov: 17 ] | |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|