Propojení DB – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Propojení DB – PHP – Fórum – Programujte.comPropojení DB – PHP – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Pajin
~ Anonymní uživatel
2 příspěvky
8. 1. 2008   #1
-
0
-

Ahoj, mám problém. Mám dotaz
$dotaz = mysql_query('SELECT * FROM ((user LEFT JOIN zaznamy ON user.usr_option1 = zaznamy.zaz_id and user.usr_option2 = zaznamy.zaz_id) ) ');

chci aby se z DB user z dvou sloupcu (option1 a option2) ktere obsahuji id cislo nacetl z DB Zaznamy patricny nazev zaznamu roven id zaznamu.

DB user
usr_id - usr_name
DB zaznamy
zaz_id - zaz_nastaveni

vysedkem dotazu by melo byt:
Uživatelské jméno: $usr_name
Option1: $zaz_nastaveni
Option2: $zaz_nastaveni

Nahlásit jako SPAM
IP: 195.113.165.–
Reklama
Reklama
8. 1. 2008   #2
-
0
-

Dej si se svym prispevkem trochu praci a poradne to vysvetli. Z tohodle absolutne netusim, o co se vlastne snazis.

Btw, proc tam mas tolik tech zavorek?

Nahlásit jako SPAM
IP: 81.30.238.–
Prosím, jestli potřebujete s něčím poradit,zeptejte se na fóru. Jakýkoliv bezdůvodný pokus mě kontaktovat skončí okamžitým přidáním do ignore listu![br][br] Současný počet osob, které to nepochopily: 7
Pajin
~ Anonymní uživatel
2 příspěvky
8. 1. 2008   #3
-
0
-

No mám dvě databáze. Prvni se jmenouje USER a obsahuje ID,JMENO,OPTION1,OPTION2 a pak mam druhou databázi Options která obsahuje ID,HODNOTA.

USER - databáze
usr_id / usr_jmeno / usr_option1 / usr_option2
1 / pajin / 2 / 4
2 / adéla / 1 / 3

OPTIONS - databáze
opt_id / opt_hodnota
1 / barva
2 / písmo
3 / velikost
4 / styl
.
.

a chci jedni dotazem dostat: id uzivatele, jmeno uzivatele a misto cisel v option1 a option2 chci dostat nazev hodnoty v DB OPTIONS.

Chci dále vypsát vše cyklem a seřadit podle opt_hodnota.

Nahlásit jako SPAM
IP: 82.100.63.–
8. 1. 2008   #4
-
0
-

Aha,, tak za prve: databaze je cely ten datovy model, ktery se sklada z tabulek, ktere se skladaji ze zanamu. To cemu ty rikas databaze jsou tabulk ;)

A bude to takhle:



SELECT * FROM user, options AS opt_1, options AS opt_2 WHERE opt_1.opt_id=user.usr_option1 AND opt_2.opt_id=user.usr_option2 AND ...nejaka tvoje podminka


a jeste par veci:
1) u pojmenovani objektu v myqsl se radsi vyhni velkym pismenum, je to pak prehlednejsi, velka pismena nech pro klicova slova jazyka
2) primarni sloupec je podle me lepsi pojmenovavat jenom "id", neavisle na tom do ktere tabulky patri. Na toto se ale nazory ruzni
3) jak chces radit podle opt hodnota, kdyz je to varchar (predpokladam)?

A jeste jedna poznamka - pouzivani hvezdicky misto senzamu poli u joinovanych vyrazu vede k peknemu pordelu. I pro optimalizaci je lepsi, kdyz vyjmenujes, ktera pole chces vytahnout.

Btw, zaregistruj se alespon, kdyz uz si tu davam tu praci a radim ti ;)

Nahlásit jako SPAM
IP: 81.30.238.–
Prosím, jestli potřebujete s něčím poradit,zeptejte se na fóru. Jakýkoliv bezdůvodný pokus mě kontaktovat skončí okamžitým přidáním do ignore listu![br][br] Současný počet osob, které to nepochopily: 7
hrach
~ Redaktor
+1
Boss
8. 1. 2008   #5
-
0
-

Príště taky prosím umístit do cekce databáze. Nepřemisťuji, protože systém tě nemá jak upozornit na přemístění :)


To CommanderZ :
díky za odpověď a mám jeden dotaz.
proč si tabulku options vybiral dvakrat a pod jinym aliasem?

zrovna nedavno sem psal sql dotaz, kde sem potreboval zjistit pocet vazeb a to dvou typu. a nepodarilo se mi. pokud sem zjistoval je jedny vazby, bylo to ok. ale jakmile jsem tam mel obe join zaraz, tak to nejak ty cisla motalo.

je toto nejake reseni, jak se podobnym problemum vyhnout?
diky

Nahlásit jako SPAM
IP: 193.179.169.–
http://jan.skrasek.com@hrachcz – webdeveloper
cheeester0
Stálý člen
8. 1. 2008   #6
-
0
-

Tak jsem registrován :)

Dekuji za rady.
Mám ale problém s tim dotazem na databázi. Problém je ze ty id v option1 a option2 jsou rozdilna a v tabulce OPTIONS jsou na ruznych radcich. Tento dotaz mi dokaze zpracovat jen jeden option1 ale druhy uz ne protoze ma jine id a tedy je na jinem radku v tabulce OPTIONS

Nahlásit jako SPAM
IP: 82.100.63.–
8. 1. 2008   #7
-
0
-

To hrach :
Problem je v tom, ze potrebujes propojit k "domovskemu radku" z tabulky users dva RUZNE radky z jine tabulky. A to jinak nezajistis. Btw, v jednom projektu jsem jednu tabulku joinoval asi 12x :)

To zaroven odpovida i na autorovu otazku: proto se ta tabulka joinuje 2x se dvema ruznymi aliasy. Prostuduj si to poradne ;)

Nahlásit jako SPAM
IP: 81.30.238.–
Prosím, jestli potřebujete s něčím poradit,zeptejte se na fóru. Jakýkoliv bezdůvodný pokus mě kontaktovat skončí okamžitým přidáním do ignore listu![br][br] Současný počet osob, které to nepochopily: 7
cheeester0
Stálý člen
8. 1. 2008   #8
-
0
-

takze budu muset az v cyklu vytvorit dva dotazy na DB aby ty hodnoty ziskl? To bude dost pomale a dost narocne pro server ne?

Nahlásit jako SPAM
IP: 82.100.63.–
9. 1. 2008   #9
-
0
-

Neeee, podivej se poradne na ten priklad, tam to mas presne napsane:

SELECT * FROM user, options AS opt_1, options AS opt_2 WHERE opt_1.opt_id=user.usr_option1 AND opt_2.opt_id=user.usr_option2 AND ...nejaka tvoje podminka


Takze ti to rozeberu hezky slovo po slovu

SELECT * FROM


snad chapes, jestli ne nak nevim co tu chces :)

user, 


Zakladni tabulkou bude tabulka "user". Ono by to mohlo vyznet tak, jakoze zalezi na poradi v jakem v tomto seznamu tabulky uvedes, coz rzhodne neni pravda. MySQL si optimalizuje poradi tabulek tak jak se mu hodi, diky podminkam (viz dale) je ale stejne naprosto jasne, ze "user" tou zakladni tabulkou bude.

options AS opt_1, options AS opt_2


Vedle tabulky "user" budeme dvakrat vybirat z tabulky options. Proto, ze budeme vybirat ze dvou ruznych radku, ji musime pripojit dvakrat. A jelikoz by ti mysql vyhodilo hybu, ze mas ve vyctu dve tabuly stejne mojmenovane (presneji, chyba by nastala pri praci s daty z techto tabulek. Reklo by ti to,z e pojmenovani "options" je viceznacne, coz nesmi), takze si musime alespon jednu z techto dvou instanci pojmenovat aliasem. Alias - tedy predzdivka - je alternativni jmeno, pod kterym se bude s tabulkou dale pracovat. Alias je vzdy uveden za slovickem AS. Ja jsem v tom priklade pro prehlednost priradil alias obema instancim te tabulky.

WHERE opt_1.opt_id=user.usr_option1 AND opt_2.opt_id=user.usr_option2


Tady je zajisteno vlastni propojeni. Jak vidis, tak se zde jiz nepracuje s nazvem tabulky "options", ale s aliasy.

Jestli to nechapes, taks i dukladne precti nejake tutorialy na joiny, ono obcas muze byt slozite si to predstavit (coz zrovna rozhodne neni tento pripad)

Nahlásit jako SPAM
IP: 81.30.238.–
Prosím, jestli potřebujete s něčím poradit,zeptejte se na fóru. Jakýkoliv bezdůvodný pokus mě kontaktovat skončí okamžitým přidáním do ignore listu![br][br] Současný počet osob, které to nepochopily: 7
cheeester0
Stálý člen
10. 1. 2008   #10
-
0
-

dekuji za vystvetleni. Mel jsem v tom zmatek ale uz to asi chapu. Jen nevim. Mam

$dotaz = mysql_query = ("SELECT * FROM user, options AS opt_1, options AS opt_2 WHERE opt_1.opt_id=user.usr_option1 AND opt_2.opt_id=user.usr_option2");


while($radek = mysql_fetch_array($dotaz)):

//chci ziskat ty dve option hodnoty
echo $radek['opt_hodnota'];

endwhile;


ale vraci mi to jen jednu. Proc?

Nahlásit jako SPAM
IP: 195.113.165.–
10. 1. 2008   #11
-
0
-

Spatne to chapes, oni se vrati obe v jednom vyusledku. Vypis si cele to asoc pole pomoci print_f a tam to uvidis.

Nahlásit jako SPAM
IP: 81.30.238.–
Prosím, jestli potřebujete s něčím poradit,zeptejte se na fóru. Jakýkoliv bezdůvodný pokus mě kontaktovat skončí okamžitým přidáním do ignore listu![br][br] Současný počet osob, které to nepochopily: 7
cheeester0
Stálý člen
10. 1. 2008   #12
-
0
-

a to vypisi jak? print_f jsem uz videl ale nevim jak to funguje

dekuji

Nahlásit jako SPAM
IP: 82.100.63.–
bukaj0
Věrný člen
10. 1. 2008   #13
-
0
-

cheeester
a to vypisi jak? print_f jsem uz videl ale nevim jak to funguje
Myslím, že spíše bylo myšleno print_r() - http://php.net/print_r. Ale doporučuji používat var_dump() - http://php.net/var_dump - protože poskytne více informací.

Nahlásit jako SPAM
IP: 85.70.13.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
cheeester0
Stálý člen
10. 1. 2008   #14
-
0
-

no tak mam:



$dotaz = mysql_query = ("SELECT * FROM user, options AS opt_1, options AS opt_2 WHERE opt_1.opt_id=user.usr_option1 AND opt_2.opt_id=user.usr_option2");

while($radek = mysql_fetch_assoc($dotaz)):

//chci ziskat ty dve option hodnoty
print_r ($radek['jmeno']);

endwhile;


ale vraci mi to stale jen jednu hodnotu :(

Nahlásit jako SPAM
IP: 82.100.63.–
10. 1. 2008   #15
-
0
-

Sry za to _f, v PHP uz jsem asi mesic a pul nic nepsal.

$dotaz = mysql_query = ("SELECT * FROM user, options AS opt_1, options AS opt_2 WHERE opt_1.opt_id=user.usr_option1 AND opt_2.opt_id=user.usr_option2"); 


while($radek = mysql_fetch_assoc($dotaz)):

//chci ziskat ty dve option hodnoty
print_r ($radek);

endwhile;


Tohle ti vypise vsechna vracena data...jako pole

Nahlásit jako SPAM
IP: 81.30.238.–
Prosím, jestli potřebujete s něčím poradit,zeptejte se na fóru. Jakýkoliv bezdůvodný pokus mě kontaktovat skončí okamžitým přidáním do ignore listu![br][br] Současný počet osob, které to nepochopily: 7
cheeester0
Stálý člen
14. 1. 2008   #16
-
0
-

jak tedy vypíši ty hodnoty pekne kazdou zvlast?
print_r ($radek); sice asi funguje ale nic nezobrazuje

Nahlásit jako SPAM
IP: 82.100.63.–
14. 1. 2008   #17
-
0
-

Mel by ti vypsat obsah pole ve formatu v jakem se v PHP pole zapisuji, pokud ti nic nevypisuje, tak je neke neco spatne.

Nahlásit jako SPAM
IP: 81.30.238.–
Prosím, jestli potřebujete s něčím poradit,zeptejte se na fóru. Jakýkoliv bezdůvodný pokus mě kontaktovat skončí okamžitým přidáním do ignore listu![br][br] Současný počet osob, které to nepochopily: 7
cheeester0
Stálý člen
14. 1. 2008   #18
-
0
-

no pokud vypisi ten cyklus bez print_r tak to jede v pohode jen mi to nevrati oba option ale jen jeden z nic. Pomoci print_r($radek); by to melo udelat co? Nevim jakym kodem dostat z print_r($radek); ty data v podobe jako klasicky z databaze v poli while($radek = mysql_fetch_assoc($dotaz)):
echo $radek['option1'];
echo $radek['option2'];
.
.
.

Nahlásit jako SPAM
IP: 82.100.63.–
cheeester0
Stálý člen
14. 1. 2008   #19
-
0
-

uz to mam! Dikes moc

Nahlásit jako SPAM
IP: 82.100.63.–
cheeester0
Stálý člen
14. 1. 2008   #20
-
0
-

tak zmena nefunguje to. Vypisuje mi to krasne pole kde vidim co vse v tom poli je ale vidim tam stejne jen jeden ze dvou option (jeho nazev a delsi hodnoty co ma ve svem radku zapsane) druhy option tam neni :O(

H E L P !!!

Nahlásit jako SPAM
IP: 82.100.63.–
cheeester0
Stálý člen
16. 1. 2008   #21
-
0
-

víte někdo jak to upravit aby v tom poli byl i druhy option a jeho cely radek? Dííky

Nahlásit jako SPAM
IP: 82.100.63.–
cheeester0
Stálý člen
17. 1. 2008   #22
-
0
-

tak jestli to jeste nekoho zajimalo tak uz mam reseni problemu:

$dotaz = mysql_query('select user.*,options.* from user,options WHERE user.id=options.opt_option1 or user.id=options.opt_option2');


mejte se

Nahlásit jako SPAM
IP: 82.100.63.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 35 hostů

Podobná vlákna

C++ propojeni — založil

Propojeni — založil caleb

Propojeni — založil caleb

Propojeni udalosti — založil crook

Htpc a propojeni s tv — založil pok

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý