.[ ČeskéHry.cz ].
Mysql Inner join

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Web Development
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
MelkorNemesis



Založen: 27. 10. 2007
Příspěvky: 12

PříspěvekZaslal: 13. listopad 2007, 21:54:45    Předmět: Mysql Inner join Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 13. listopad 2007, 21:57:04    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
OndraSej



Založen: 28. 07. 2007
Příspěvky: 767
Bydliště: Brandýs nad Labem

PříspěvekZaslal: 13. listopad 2007, 21:57:54    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
MelkorNemesis



Založen: 27. 10. 2007
Příspěvky: 12

PříspěvekZaslal: 13. listopad 2007, 22:07:13    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 13. listopad 2007, 23:51:41    Předmět: Odpovědět s citátem

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 Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
MelkorNemesis



Založen: 27. 10. 2007
Příspěvky: 12

PříspěvekZaslal: 14. listopad 2007, 20:38:26    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Ola



Založen: 01. 08. 2007
Příspěvky: 14

PříspěvekZaslal: 15. listopad 2007, 15:28:41    Předmět: Odpovědět s citátem

co treba si to zvyraznovani nastavit ?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 15. listopad 2007, 16:14:55    Předmět: Odpovědět s citátem

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 Wink

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
MelkorNemesis



Založen: 27. 10. 2007
Příspěvky: 12

PříspěvekZaslal: 27. listopad 2007, 18:18:18    Předmět: Odpovědět s citátem

rezna: jo diky, uz debuguju a parkrat se mi to docela hodilo.. Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Tutchek



Založen: 28. 07. 2007
Příspěvky: 140
Bydliště: Praha -Pankrác

PříspěvekZaslal: 28. listopad 2007, 03:14:11    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Mem



Založen: 28. 07. 2007
Příspěvky: 1959
Bydliště: Olomouc

PříspěvekZaslal: 28. listopad 2007, 07:48:12    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Web Development Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna