Moin,
ich versuche gerade krampfhaft 2 sql abfragen zu einer zu kombinieren.
allerdings, naja, kommen dabei mehr daten bei raus, als es eigentlich dürften. um das ganz etwas zu skizzieren hab ich hier einmal die 3 tabellen um die es geht:
hier sind die daten zu datein drinne, die ich versuche abzufragen
dann hab ich 2 relationstabellen, einmal usergroups
und die branchen
nun hab ich also such wert jeweils eine gruppe und eine branche.
zum testen hab ich jetzt erstmal nur eine join auf 2 tabelle gebastelt,
die scheinbar bei beiden kriterien funktionert:
was ich nun versucht habe, sieht so aus:
jetzt ist es so das die zusammengelegte abfrage zB 9 ergebnisse liefert.
die beiden kleinen aber nur je 2, wobei der select für `se_usergroups2media`.`usergroup` auch nur zur sichtkontrolle ist, ob auch wirklich nur die richtigen daten geladen werden....
hinterher muss da dann auch noch ein group drauf, weil ich letztlich ja nur jeweils einmal das jeweilige dokument aus der media brauche ...
kann mir da jemand helfen, dieses chaos zu sortieren?
weil auch mit einlesen, kriege ich das mit den joins irgendwie noch nicht richtig auf die kappe ...
grüße,
jon
edit ....
ok, ich hab jetzt einfach mal die logik anders gestrickt ... kann mir jmd bestätigen das ich damit irgendwie richtig liege?
ich versuche gerade krampfhaft 2 sql abfragen zu einer zu kombinieren.
allerdings, naja, kommen dabei mehr daten bei raus, als es eigentlich dürften. um das ganz etwas zu skizzieren hab ich hier einmal die 3 tabellen um die es geht:
hier sind die daten zu datein drinne, die ich versuche abzufragen
PHP-Code:
CREATE TABLE IF NOT EXISTS `se_media` (
`id` int(11) NOT NULL auto_increment,
`hash` varchar(32) NOT NULL,
`headline` varchar(255) NOT NULL,
`subtitle` varchar(255) NOT NULL,
`infotext` longtext NOT NULL,
`file` varchar(255) NOT NULL,
`type` varchar(255) NOT NULL,
`behavior` varchar(255) NOT NULL,
`category` int(11) NOT NULL,
`priority` int(11) NOT NULL,
`active` int(11) NOT NULL,
`hits` int(11) NOT NULL,
`timestamp` datetime NOT NULL,
PRIMARY KEY (`id`)
)
PHP-Code:
CREATE TABLE IF NOT EXISTS `se_usergroups2media` (
`id` int(11) NOT NULL auto_increment,
`usergroup` varchar(255) NOT NULL,
`media` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
)
PHP-Code:
CREATE TABLE IF NOT EXISTS `se_industries2media` (
`id` int(11) NOT NULL auto_increment,
`industry` varchar(255) NOT NULL,
`media` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
)
zum testen hab ich jetzt erstmal nur eine join auf 2 tabelle gebastelt,
die scheinbar bei beiden kriterien funktionert:
PHP-Code:
SELECT `se_media`.*, `se_usergroups2media`.`usergroup`
FROM `se_media`, `se_usergroups2media`
WHERE
(`se_usergroups2media`.`media` = `se_media`.`hash` AND
`se_usergroups2media`.`usergroup` = "gruppeXYZ" AND `se_media`.`active` = 1)
SELECT `se_media`.*, `se_industries2media`.`industry`
FROM `se_media`, `se_industries2media`
WHERE
(`se_industries2media`.`media` = `se_media`.`hash` AND
`se_industries2media`.`industry` = "brancheXYZ" AND `se_media`.`active` = 1)
PHP-Code:
SELECT `se_media`.*, `se_usergroups2media`.`usergroup`, `se_industries2media`.`industry`
FROM `se_usergroups2media`, `se_industries2media`, `se_media`
WHERE
(`se_usergroups2media`.`media` = `se_media`.`hash` AND
`se_usergroups2media`.`usergroup` = "gruppeXYZ" AND `se_media`.`active` = 1) OR
(`se_industries2media`.`media` = `se_media`.`hash` AND
`se_industries2media`.`industry` = "brancheXYZ" AND `se_media`.`active` = 1)
die beiden kleinen aber nur je 2, wobei der select für `se_usergroups2media`.`usergroup` auch nur zur sichtkontrolle ist, ob auch wirklich nur die richtigen daten geladen werden....
hinterher muss da dann auch noch ein group drauf, weil ich letztlich ja nur jeweils einmal das jeweilige dokument aus der media brauche ...
kann mir da jemand helfen, dieses chaos zu sortieren?
weil auch mit einlesen, kriege ich das mit den joins irgendwie noch nicht richtig auf die kappe ...
grüße,
jon
edit ....
ok, ich hab jetzt einfach mal die logik anders gestrickt ... kann mir jmd bestätigen das ich damit irgendwie richtig liege?
PHP-Code:
SELECT `se_media`.*, `se_usergroups2media`.`usergroup`, `se_industries2media`.`industry`
FROM `se_media`
INNER JOIN `se_usergroups2media` ON `se_usergroups2media`.`media` = `se_media`.`hash`
INNER JOIN `se_industries2media` ON `se_industries2media`.`media` = `se_media`.`hash`
WHERE (`se_usergroups2media`.`usergroup` = "groupXYZ" OR
`se_industries2media`.`industry` = "brancheXYZ") AND
`se_media`.`active` = 1
GROUP BY `se_media`.`hash`
ORDER BY `se_media`.`priority` DESC
Kommentar