» »

MySQL združevanje tabel..

MySQL združevanje tabel..

lordgreg ::

erm... takole je..

imam dve tabeli FOO in BAR, obe imata različne stolpce, razen dveh STOLP1 in STOLP2..

rad bi samo tabeli združil, vzel ven ta dva stolpca in "fetchnil" samo zadnjo vrsto (limit 0,1)

help! thanks ;)
  • spremenil: lordgreg ()

MUC ::

Jah, napiš si skriptico ane ... pomoje tu ne boš dobil nobenega, k bi ti jo namesto tebe :)

Sicer sem enkrat ene podobne zadeve že delal, samo nimam več shranjeno.

darh ::

mislm da bi tole mogl delat:


SELECT f.STOLP1, b.STOLP2
FROM FOO f LEFT JOIN BAR b
LIMIT 1;


lohka pa se pogoje postavlas, pod katerimi se tabeli zrizita, npr:


SELECT f.STOLP1, b.STOLP2
FROM FOO f LEFT JOIN BAR b ON f.STOLP1 <> b.STOLP2
LIMIT 1;



lp,x

Excuses are useless! Results are priceless!

lordgreg ::

MUC: kaj pri vragu si ti hotel s tem povedat, meni ni jasno!

xbite: erm.. zadeva ne dela,.. ti bom kar realen primer dal:

$query = "select f.USERID, b.DATE from forum_thread f LEFT JOIN forum_posts b LIMIT 1";

MySQL said: You have an error in your SQL syntax near 'LIMIT 1' at line 1

Gre-Gor ::

ce bi rad zdruzu obe tabeli prek npr. id stolpca potem sam nared
$query = "select f.USERID, b.DATE from forum_thread f LEFT JOIN forum_posts b USING(id) LIMIT 1";

ce mas pa razlicna stolpca pa nared
$query = "select f.USERID, b.DATE from forum_thread f LEFT JOIN forum_posts b ON f.col1 = b.col2 LIMIT 1";
http://www.delphi-si.com

Tr0n ::

Ma kaki left join.

select stolp1, stolp2 from foo, bar

al, pa:

select f.stolp1, b.stolp2, from foo f, bar b

Zdaj, verjetno moras se preko primarnih kljucev povezat.

lordgreg ::

TrOn: niti prva, niti druga zadeva ne dela! bom pa probal še ostale zadeve...

Tr0n ::

Dela to 100%. Samo tak na pamet ti tezko govorim, ker moram tocno videt tabelo in kaj bi ti sploh rad izpisal.

lordgreg ::

TrOn: realen primer je takle..

imam dve tabeli, eno forum_thread, drugo forum_posts, obe imata dva enaka stolpca, USERID in DATE, oba enako definirana,..

rad bi obe tabeli združil, v stolpcih USERID in DATE in iz rezultata nato izvlekel zadnjo vrstico, sortirano po datumu (order by DATE desc LIMIT 1), tako da bi na koncu kot rezultat dobil:

2 in 2001-06-12 (userid in date)

kdorkoli... pomoč!

Tr0n ::

Poslji mi tvojo bazo (mysqldump) oz. jo shrani v tekstovno datoteko.

tr0n@tr0n.org

lordgreg ::

kaj te s tabo je človek.. ni šans..

zaj je vse skupaj izpadlo tako:

imam avto, počena šipa, prinesem ti vrata od avta, ti pa meni, da ne moreš nič, ker nimaš mašine :/ kje je tu logika.. in zakaj... ZAKAJ bi ti potem moral še celo mojo bazo poslat??? harharhar....

čekdorkoli ve tole zadevo.. please help me!

darh ::

ja ne vem kaj bi bil problem, ce bi poslal strukturo teh dveh tabel ane... dooh ;)
Excuses are useless! Results are priceless!

lordgreg ::

in kaj ti bo, če ti že sedaj povem, da rabim točno določena stolpca iz njih USERID in DATE???

wintermute ::

Sicer sem se pred dvema dnevoma zacel ukvarjati s tem (da vidim, kaksna "znanost" je ta SQL), ampak lemme try...

Ce sledim tvojemu opisu problema, in ce pomeni "rad bi obe tabeli združil, v stolpcih USERID in DATE" to, da selectas zapise, pri katerih so vrednosti v omenjenih poljih enake, access generira takle query.

SELECT TOP 1 forum_threads.UserID, forum_threads.Date
FROM forum_threads INNER JOIN forum_posts ON (forum_threads.UserID = forum_posts.UserID) AND (forum_threads.Date = forum_posts.Date)
ORDER BY forum_threads.Date DESC;

Izgleda kar v redu, ne vem pa kako kompatibilno je to z MySQL-ovim narecjem (ja, tudi access sem prvic pognal pred dvema dnevoma).

Povej, ce sem udaril mimo8-).

HTH.

Tr0n ::

Finta je, da moram videt kako imas struktuirano bazo (ne podatke, samo ogrodje), da lahko direktno probam, ce bi rad, da ti pomagam. Ker na pamet je tezko govorit, ker ne vem, kaksne imas relacije med tabelami. Sicer imas zraven MySQL tudi programcek MySqlManager, kjer lahko direktno sprobas, kaj ti kaksen query vrne. V bistvu pa joinas takole, kot smo ze povedali:

select tabela1.nekaj1, tabela2.nekaj2 from tabela1, tabela2 where tabela1.id = tabela2.id order by blabla limit blabla...

lordgreg ::

naj vam bo.. samo, zdaj bi vas pa res prosil, če mi pomagate, rabim USERID in DATE iz obeh, potem pa najnovejši datum z useridjem, ki ga je pač naredil:


# phpMyAdmin MySQL-Dump
# http://phpwizard.net/phpMyAdmin/
#
# Host: localhost Database : nettech
# --------------------------------------------------------

#
# Table structure for table 'forum_posts'
#

CREATE TABLE forum_posts (
POSTID int(11) NOT NULL auto_increment,
FORUMID int(11) DEFAULT '0' NOT NULL,
THREADID int(11) DEFAULT '0' NOT NULL,
USERID int(11) DEFAULT '0' NOT NULL,
SIGNATURE tinyint(1),
OPEN tinyint(1),
VISIBLE tinyint(1),
VIEWS int(11) DEFAULT '0' NOT NULL,
DATE datetime,
ICONID int(11) DEFAULT '0' NOT NULL,
POST text,
PRIMARY KEY (POSTID)
);


CREATE TABLE forum_thread (
THREADID int(11) NOT NULL auto_increment,
FORUMID int(11) DEFAULT '0' NOT NULL,
USERID int(11) DEFAULT '0' NOT NULL,
SIGNATURE tinyint(1),
OPEN tinyint(1),
VISIBLE tinyint(1),
VIEWS int(11) DEFAULT '0' NOT NULL,
DATE datetime,
ICONID int(11),
SUBJECT varchar(100),
THREAD text,
PRIMARY KEY (THREADID)
);

Tr0n ::

Sem vpisal ene random podatke v vsako tabelo.

select p.userid as prvi_id, p.date as prvi_date, t.userid as drugi_ip, t.date as drugi_date from forum_posts p, forum_thread t order by p.date desc limit 1

vrne:

prvi_id prvi_date drugi_ip drugi_date
------- --------- -------- ----------
6 2001-06-16 21:53:17 4 2001-06-16 21:53:37

Samo ne vem, ce je ravno ok, ker baza ni ravno dobro zasnovana (ni normalizirana) pa tudi moras posebaj dolocit, ali naj sortira po datumi, ki je v tabeli forum_posts ali tistem, ki je v forum_threds. Zato bos imel probleme tudi, ko bos kasneje ven brisal, pa ti bo kaksen id manjkal.

lordgreg ::

erm.. jaz bi ravno DATE iz obeh tabel združil in vrnil zadnjega... arghh...

Tr0n ::

Ne mores oba datuma pod eno spremenljivko zdruzit, edino ce si naredis zacasno tabelo. To se potem naredi na strani programa oz. skripte.

Nemenej ::

kaj pomeni, da baza ni normalizirana? :)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

portal ostal, baza sla

Oddelek: Izdelava spletišč
61744 (1629) bombacina
»

SQL problem

Oddelek: Programiranje
91461 (1298) Bossek
»

mySQL(+php) auto_increment field v tabeli.. Kako...?

Oddelek: Izdelava spletišč
61051 (983) Zzzzzzz
»

php, mysql SELECT MAX(id)...

Oddelek: Programiranje
171214 (1110) Gre-Gor
»

Kako zaceti z PHP in MySQL

Oddelek: Programiranje
222369 (2073) simon

Več podobnih tem