Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
MelkorNemesis
Založen: 27. 10. 2007 Příspěvky: 12
|
Zaslal: 13. listopad 2007, 21:54:45 Předmět: Mysql Inner join |
|
|
Cau mam kod, kterej v phpMyAdminovi vali uplne bez problemy...
kód: |
SELECT news.ID, news.DATEADDED, news.AUTOR, news.HEAD, news.CONTENT, category FROM news LEFT JOIN category ON news.IDcategory = category.id |
ale kdyz ho vlozim do PHP, tak mi to hlasi chybu, zkousel sem uz vsechno mozny, ale porad to nechce jit, kdyby nekdo vedel co s tim..tak at mi napise, diky
kód: |
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/free/ic.cz/u/universalblog/root/www/uvod.php on line 45
$sql_qry = ("SELECT news.ID, news.DATEADDED, news.AUTOR, news.HEAD, news.CONTENT, category FROM news LEFT JOIN category ON news.IDcategory = category.id");
while ($result = mysql_fetch_assoc($sql_qry)){
echo "<div id='news'><a href='http://www.universalblog.ic.cz/index.php?page=news&ID=".$result['news.id']."' class='newshead'>". $result['news.head'] ."</a><br /><span class='newsdate'> ". $result['news.dateadded'] ."<br /> ". $result['news.autor'] ." - ".$result['category']."</span><br />". preview($result['news.content']). "</div><hr>";
|
|
|
Návrat nahoru |
|
|
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 13. listopad 2007, 21:57:04 Předmět: |
|
|
DEBUG DEBUG DEBUG
kód: |
$sql_qry = ("SELECT news.ID, news.DATEADDED, news.AUTOR, news.HEAD, news.CONTENT, category FROM news LEFT JOIN category ON news.IDcategory = category.id"); |
ma byt
kód: |
$sql_qry = mysql_query("SELECT news.ID, news.DATEADDED, news.AUTOR, news.HEAD, news.CONTENT, category FROM news LEFT JOIN category ON news.IDcategory = category.id"); |
|
|
Návrat nahoru |
|
|
OndraSej
Založen: 28. 07. 2007 Příspěvky: 767 Bydliště: Brandýs nad Labem
|
Zaslal: 13. listopad 2007, 21:57:54 Předmět: |
|
|
Takhle to uplne nefunguje... napred je potreba pripojeni k databazi a provedeni toho prikazu (mysql_connect, mysql_query). tim dostanes nejaky objekt reprezentujici vysledky a teprve na nem muzes delat fetch_assoc
doporucuju se inspirovat prikladem v dokumentaci http://cz2.php.net/mysql_fetch_assoc _________________ http://trionteam.net |
|
Návrat nahoru |
|
|
MelkorNemesis
Založen: 27. 10. 2007 Příspěvky: 12
|
Zaslal: 13. listopad 2007, 22:07:13 Předmět: |
|
|
rezna: hmm to bude asi ono..sem to nejak prepisoval a smazal .. dik
ondrasej: ne to ja sem vlozil jen cast kodu, takhle uz sem s DB pracoval, ale ne s inner joinama |
|
Návrat nahoru |
|
|
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 13. listopad 2007, 23:51:41 Předmět: |
|
|
OndraSej napsal: |
Takhle to uplne nefunguje... napred je potreba pripojeni k databazi a provedeni toho prikazu (mysql_connect, mysql_query). tim dostanes nejaky objekt reprezentujici vysledky a teprve na nem muzes delat fetch_assoc |
mno ma to trochu vad v PHP - to mysql_connect se snad ani za urcitych podminek volat nemusi, pokud mas spravne pojmenovane promenne ve kterych drzis user/pass tak se to prijoinuje automaticky pri volani mysql_query
taktez neni treba u mysql_query uvades connection (ackoliv je to parametr) - protoze proste se vezme posledni otevrena
PHP je proste zvrhlej jazyk
MelkorNemesis:
1) tvuj problem nespociva v joinech, ale v tom ze nemas nejspis vhodny editor se syntax-highlightem a neumis si hledat chyby v kodu
2) stale mluvis o INNER JOINech, ale tvuj kod obsahuje pouze LEFT JOIN |
|
Návrat nahoru |
|
|
MelkorNemesis
Založen: 27. 10. 2007 Příspěvky: 12
|
Zaslal: 14. listopad 2007, 20:38:26 Předmět: |
|
|
jojo, obsahuje jen left join no..puvodne sem jej hledal (inner) a psali ze je to skoro shodny.
A mam PSpad a ten mi v retezci " " kam pisu SQL dotaz nic nezvyraznuje, mam vsecko zeleny...(ne ze by asi v jinych editorech to zvyrazneny bylo??) |
|
Návrat nahoru |
|
|
Ola
Založen: 01. 08. 2007 Příspěvky: 14
|
Zaslal: 15. listopad 2007, 15:28:41 Předmět: |
|
|
co treba si to zvyraznovani nastavit ? |
|
Návrat nahoru |
|
|
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 15. listopad 2007, 16:14:55 Předmět: |
|
|
MelkorNemesis napsal: |
jojo, obsahuje jen left join no..puvodne sem jej hledal (inner) a psali ze je to skoro shodny.
A mam PSpad a ten mi v retezci " " kam pisu SQL dotaz nic nezvyraznuje, mam vsecko zeleny...(ne ze by asi v jinych editorech to zvyrazneny bylo??) |
narazka byla na to ze mas editor ktery nejspis nezvyraznuje nazev funkce, coz je chyba, protoze pak lze trivialne na kazdem zkontrolovat ze tam mam zapsane jmeno funkce ze
a dalsi vec je naucit se debugovat vlastni kod - treba napsat "echo $sql_qry" tesne pred to mysql_fetch_asssoc() - v tom pripade by ti to totiz vypsalo ten SQL retezec a ty bys vedel ze neco je spatne, protoze spravne tam ma byt cislo identifikujici resource |
|
Návrat nahoru |
|
|
MelkorNemesis
Založen: 27. 10. 2007 Příspěvky: 12
|
Zaslal: 27. listopad 2007, 18:18:18 Předmět: |
|
|
rezna: jo diky, uz debuguju a parkrat se mi to docela hodilo.. |
|
Návrat nahoru |
|
|
Tutchek
Založen: 28. 07. 2007 Příspěvky: 140 Bydliště: Praha -Pankrác
|
Zaslal: 28. listopad 2007, 03:14:11 Předmět: |
|
|
MelkorNemesis napsal: |
jojo, obsahuje jen left join no..puvodne sem jej hledal (inner) a psali ze je to skoro shodny.
A mam PSpad a ten mi v retezci " " kam pisu SQL dotaz nic nezvyraznuje, mam vsecko zeleny...(ne ze by asi v jinych editorech to zvyrazneny bylo??) |
uz to nesouvisi s problemem ale
pokud mas tabulku A a tabulku B ktere spolu joinujes, pak vyvstava otazka co delat, kdyz mas zaznam v tabulce A nemas odpovidajici zaznam v tabulce B
at to mame jednodussi, A = lide, B = povolani
mame tri lidicky
jmeno, povolani
Franta Novak, Policajt
Mařena Hrubešová, Hajzlbába
Bába Dymáková, důchodkyně
Františka Kopytová, Policajt
a tri povolani
nazev, popis
Policajt, Má obušek
Zahradník, Zpravidla je vrahem
Popelář, Dreamjob dětí ve školce
a budu joinovat lidi na povolani s podminkou lide.povolani = povolani.nazev
Pokud dam jen JOIN (tzn ten inner join) pak
kód: |
SELECT * FROM lide JOIN povolani ON (lide.povolani = povolani.nazev)
vrati
Franta Novak, Policajt, Má obušek
Františka Kopytová, Policajt, Má obušek |
Tzn to vezme data z leve tabulky, a napoji je na data z prave tabulky... ty co nenaparoval zleva vyhodi... a pak vyhodi i ty z prava, ktere nemaji protejsek.. proto mimo franty novaka zmizi vsichni lidi a mimo policajta i vsechna povolani
Ted tvuj LEFT JOIN
kód: |
SELECT * FROM lide LEFT JOIN povolani ON (lide.povolani = povolani.nazev)
vrati
Franta Novak, Policajt, Má obušek
Mařena Hrubešová, Hajzlbába, NULL
Bába Dymáková, důchodkyně, NULL
Františka Kopytová, Policajt, Má obušek |
jinými slovy, vezme vše zleva a napojí to na záznamy vpravo (kde to jde)... pokud to nic nenajde tak to bere ze zaznam zprava je NULL
Hodí se to, pokud chci seznam vsech lidi a navic informaci o jejich povolani, ale kdyz tu informaci nemam tak mi staci jmeno
Poslední příklad je nečekaně RIGHT JOIN, to samé ale naopak... beru data zprava a lepím na to záznamy zleva... tedy chci seznam všech povolání a pokud ta data mám, pak i lidi k tomu (ale není to podmínkou)
kód: |
SELECT * FROM lide RIGHT JOIN povolani ON (lide.povolani = povolani.nazev)
vrati
Franta Novak, Policajt, Má obušek
Františka Kopytová, Policajt, Má obušek
NULL, Zahradník, Zpravidla je vrahem
NULL, Popelář, Dreamjob dětí ve školce |
disclaimer: data mám lehce zjednodušena...
a) joinovat pres retezec, fuj
b) asi to po tom joinu da cely levy a cely pravy zaznam, ja tu odpovidajici sloupecky sloucil
c) ser na MySQL, pojd do Postgre, to je databaze... ne tenhle fajlsystem... _________________ Nemarni čas u kompu, pojď si zaběhat do lesa
function god_exists() { return false; } |
|
Návrat nahoru |
|
|
Mem
Založen: 28. 07. 2007 Příspěvky: 1959 Bydliště: Olomouc
|
Zaslal: 28. listopad 2007, 07:48:12 Předmět: |
|
|
OT Tutchek: Kdybys chodil na IRC, tak bys vedel, ze OUTER joiny uz jsme Melkorovi davno vysvetlili (dokonce na nazornejsich tabulkach PI*A a CHLUP spojenych vazbou 1:n) _________________
|
|
Návrat nahoru |
|
|
|