[SQL] 2 Tabellen wie 1 Tabelle behandeln

resoucer

Gesperrt
ID: 77379
L
20 April 2006
2.846
109
Hi, also ich habe hier mind. 2 (auch mehr möglich !) Tabellen die
bis auf den Namen identisch sind.

sprich:

click_1_1207
click_2_1207

Aufbau
PHP:
  `uid` int(6) NOT NULL default '0',
  `aid` int(5) NOT NULL default '0',
  `kid` int(7) NOT NULL default '0',
  `ip` varchar(15) NOT NULL default '',
  `referer` varchar(255) NOT NULL,
  `time` int(11) NOT NULL default '0',
  KEY `uid` (`uid`)

Jetzt will ich mit einer SQL abfrage alle datensätze mit
Count(*) as `sum` from .... where kid=$id group by uid
raus bekommen.
 
ich wusste das das kommt..... (sogar von dir)........

habe es jetzt mal ganz einfach so versuch zu lösen

PHP:
SELECT * FROM click_1_1207 as `a_1`,click_2_1207 as `a_2` WHERE ( a_1.kid =8 or a_2.kid =8) AND ( a_1.time between 944002799 AND 1198364399 or a_2.time between 944002799 AND 1198364399)
klappt nur noch nicht ganz so wie ich will.
Wenn beide Tabellen Treffer beinhalten zeigt er diese richtig an.
Beinhaltet aber nur 1 Tabelle was davon dann zeigt er nichts an
 
Zuletzt bearbeitet:
ich wusste das das kommt..... (sogar von dir)........
wird wohl seine Gründe haben ;)

habe es jetzt mal ganz einfach so versuch zu lösen

PHP:
SELECT * FROM click_1_1207 as `a_1`,click_2_1207 as `a_2` WHERE ( a_1.kid =8 or a_2.kid =8) AND ( a_1.time between 944002799 AND 1198364399 or a_2.time between 944002799 AND 1198364399)
klappt nur noch nicht ganz so wie ich will.
Wenn beide Tabellen Treffer beinhalten zeigt er diese richtig an.
Beinhaltet aber nur 1 Tabelle was davon dann zeigt er nichts an
bei dir wird mir den Tabellen ein kartesisches Produkt erstellt, das ist so total falsch, ohne Merge-Tables ist mir da auch keine Lösung bekannt, die möglich wäre
 
dann versuch ich mal meine erste konfrontation mit merge tabs

Versuch
PHP:
CREATE ALGORITHM = MERGE VIEW temp_stat (tmp_uid, tmp_aid,tmp_kid,tmp_time,tmp_referer,tmp_ip) AS
SELECT uid,aid,kid,time,referer,ip FROM `click_1_1207` WHERE time between 944002799 AND 1198364399;

mhh, und nu fehlt ja irgendwie die 2 tabelle........
 
ähm, ich hatte doch kalr und deutlich merge-table gesagt :roll:

Code:
CREATE TABLE click_1207 (
... deine spalten...)
ENGINE=MERGE UNION=(click_1_1207, click_2_1207, click_3_1207) INSERT_METHOD=LAST;
 
ähm, ich hatte doch kalr und deutlich merge-table gesagt :roll:

Code:
CREATE TABLE click_1207 (
... deine spalten...)
ENGINE=MERGE UNION=(click_1_1207, click_2_1207, click_3_1207) INSERT_METHOD=LAST;

okay er legt die jetzt an.
Aber irgendwie total doof, da ich die Tabellen ja sofort auch zusammen setzen könnte. Und das habe ich nicht gemacht, damit nicht 10 mio einträge in einer tabelle sind.

auch müsste ich die tabelle bei jedem aufrufen neu erstellen lassen da evtl. neue Tabellen hinzukommen könnten (click_4 / click_5 etc.)
Und ob sich das dann lohnt ? Das sind ja zig hundert MB die er jedesmal erstellen müsste......
 
Zuletzt bearbeitet:
*grr*
schau doch einfach mal in das manual bevor du thesen rausposaunst.
merge tables gehen einfach linear nacheinander alle angegebenen tabellen durch und speichern selbst keine daten.
und du hast keine 10mio einträge in der tabelle um die schreib-zugriffe net zu verlangsamen, merge-tables nutzt du aber nur zum lesen (beim schreiben wird eine myisam-tabelle geschrieben).

Finde ne andere Möglichkeit und du bist mein Held, aber ich kenne mich doch recht gut in SQL aus und mir ist keine Möglichkeit bekannt
 
Wenn du weder mit merge tables, noch views machen willst kannst dus auch mit einem Subquery machen.

PHP:
SELECT
	COUNT(*)
FROM
	(
		SELECT
			*
		FROM
			click_1_1207
	UNION
		SELECT
			*
		FROM
			click_2_1207
	) AS clicks
WHERE
	clicks.kid = 'XXX'
 
ja ich werde das mit merge versuchen nur
finde ich irgendwie kein Befehl um in einer vorhandenen tabelle bei union=(tables) neue tabellen hinzuzufügen.