PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   SQL / Datenbanken (https://www.php-resource.de/forum/sql-datenbanken/)
-   -   2 SQL Abfragen über insgesamt 3 Tabellen in eine Abfrage (https://www.php-resource.de/forum/sql-datenbanken/101087-2-sql-abfragen-ueber-insgesamt-3-tabellen-in-eine-abfrage.html)

xJonx 26-01-2011 10:36

2 SQL Abfragen über insgesamt 3 Tabellen in eine Abfrage
 
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
PHP-Code:

CREATE TABLE IF NOT EXISTS `se_media` (
  `
idint(11NOT NULL auto_increment,
  `
hashvarchar(32NOT NULL,
  `
headlinevarchar(255NOT NULL,
  `
subtitlevarchar(255NOT NULL,
  `
infotextlongtext NOT NULL,
  `
filevarchar(255NOT NULL,
  `
typevarchar(255NOT NULL,
  `
behaviorvarchar(255NOT NULL,
  `
categoryint(11NOT NULL,
  `
priorityint(11NOT NULL,
  `
activeint(11NOT NULL,
  `
hitsint(11NOT NULL,
  `
timestampdatetime NOT NULL,
  
PRIMARY KEY  (`id`)


dann hab ich 2 relationstabellen, einmal usergroups
PHP-Code:

CREATE TABLE IF NOT EXISTS `se_usergroups2media` (
  `
idint(11NOT NULL auto_increment,
  `
usergroupvarchar(255NOT NULL,
  `
mediavarchar(255NOT NULL,
  
PRIMARY KEY  (`id`)


und die branchen
PHP-Code:

CREATE TABLE IF NOT EXISTS `se_industries2media` (
  `
idint(11NOT NULL auto_increment,
  `
industryvarchar(255NOT NULL,
  `
mediavarchar(255NOT NULL,
  
PRIMARY KEY  (`id`)


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:
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

was ich nun versucht habe, sieht so aus:
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

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?
PHP-Code:

SELECT `se_media`.*, `se_usergroups2media`.`usergroup`, `se_industries2media`.`industry`
FROM `se_media`
INNER JOIN `se_usergroups2mediaON `se_usergroups2media`.`media` = `se_media`.`hash`
INNER JOIN `se_industries2mediaON `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`.`priorityDESC 


AmicaNoctis 26-01-2011 18:02

Hallo,

ob es funktioniert, kann ich nicht sagen, aber deine letzte Variante sieht um Längen besser aus als dieser Theta-Style-Kram davor. Syntaktisch und formal gibt's nichts zu bemängeln. Einzig der *-Verweis in den Spaltenreferenzen sollte noch aufgelöst werden.

Gruß,

Amica


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:51 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG