php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 25-02-2008, 13:27
chris1980
 Newbie
Links : Onlinestatus : chris1980 ist offline
Registriert seit: Feb 2008
Beiträge: 9
chris1980 ist zur Zeit noch ein unbeschriebenes Blatt
Standard [SQL allgemein] SQL JOIN - mit Abfrage über mehrere Datenbanken!!

Hallo,
ich bin neu hier und habe ein riesiges Problem ich habe mich total im Code verhäddert bzw. mich selbst glaube ich überschätzt hoffe das mir jemand helfen kann:

MEIN PROBLEM:
Ich habe die Dantenbanken stellenanzeigen, firmen, rubriken, kategorien, bundeslaender und anstellungsverhaeltnisse. Alle Datenbanken haben eine id, die auch in allen gleich heisst "id". Die Datenbank stellenanzeigen ist sozusagen die Masterdatenbank und hat die spalten id, firma, rubrik, kategorien, bundesland, anstellungsverhaeltniss und datum. Die anderen Datenbanken firmen, rubriken, bundeslaender und anstellungsverhaeltnisse haben jeweils eine id und dann meist nur noch eine weitere Spalte "name" mit dem Werten z.B. ort, kategorie, usw. In der Datenbank stellenanzeigen läuft alles zusammen z.B

***************************
stellenanzeigen: ( fi=firma / ru=rubrik / bu=bundesland / an=anstellungsverhaeltniss )
id-----fi-----ru-----bu-----an------ka-----datum
1-----2------3------1------2-------1------2008-02-04
2-----1------2------4------3-------2------2008-03-02
3-----4------3------2------1-------3------2008-01-09
***************************
firmen:
id-----name
1-----BMW
2-----Henkel
3-----Aldi
4-----ePlus
***************************
rubriken:
id-----name
1-----Programmierer gesucht für Projekt
2-----Buchhaltung für Heimarbeit
3-----Aussendienst mit starken Nerven
4-----Innendienst mit netter Stimme
***************************
kategorien:
id-----name
1-----Programmierung / IT
2-----Buchhaltung / Steuern
3-----Vertrieb / Verkauf
4-----Inbound / Betreuung
***************************
bundeslaender:
id-----name
1-----NRW
2-----Berlin
3-----Hessen
4-----Hamburg
***************************
anstellungsverhaeltnisse:
id-----name
1-----Vollzeit
2-----Teilzeit
3-----Praktikum
4-----Freelancer


Meine SQL-Abfrage sieht so aus:



liefert jedoch kein Ergebnis.

Wenn ich die SQL-Abfrage mit "*" mache geht alles, nur schmeisst das Script mir dann alle id's und namen durcheinander - ist ja klar kann sie nicht eindeutig zuordnen.


PHP-Code:
SELECT
     stellenanzeigen
.id,
     
firmen.name,
     
rubriken.name,
     
bundeslaender.name,
     
stellenanzeigen.datum,
     
stellenanzeigen.kategorien,
     
kategorien.id,
     
stellenanzeigen.bundeslaender,
     
bundeslaender.id,
     
stellenanzeigen.anstellungsverhaeltnisse,
     
anstellungsverhaeltnisse.id
FROM
     firmen
,rubriken,bundeslaenderkategorien,anstellungsverhaeltnissestellenanzeigen
INNER JOIN kategorien ON stellenanzeigen
.kategorien=kategorien.id 
INNER JOIN bundeslaender ON stellenanzeigen
.bundeslaender=bundeslaender.id
INNER JOIN anstellungsverhaeltnisse ON stellenanzeigen
.anstellungsverhaeltnisse=anstellungsverhaeltnisse.id 
WHERE
     kategorien
.id=AND 
     
bundeslaender.id=16 AND 
     
anstellungsverhaeltnisse.id=
ORDER by stellenanzeigen
.id 
LIMIT 0 
20 


Sitze da schon Wochen dran an dem Problem, wäre wirklich super wenn jemand einen Rat oder Lösung hat.
Gruss Chris

Geändert von chris1980 (25-02-2008 um 20:15 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 25-02-2008, 14:37
H2O
 PHP Junior
Links : Onlinestatus : H2O ist offline
Registriert seit: Jul 2007
Beiträge: 937
H2O ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo Chris
Zitat:
Original geschrieben von chris1980
liefert jedoch kein Ergebnis.
ist natürlich keine Fehlerbeschreibung.
Und viel unleserlicher kann man SQL-Abfragen wahrscheinlich nicht darstellen. Ein paar Leerzeichen oder Zeilenumbrüche kosten nicht so enorm viel Speicherplatz. Bitte brich ihn noch um, ein zweites mal scrolle ich im gleichen Beitreg nicht horizontal. Hier kannst du nachlesen, wie solche Abfragen vernünftig formatiert werden können.
Aus dieser Unleserlichkeit hast du wahrscheinlich auch den Überblick verloren. Da hast du ausser zu rubriken zu allen andern Tabellen mindestens zwei, zu bundeslaender sogar drei, teilweise unbedingte JOINS. Das gäbe bei je 10 Einträgen allein 100'000 Zeilen. Dazu kommen dann noch die expliziten JOINS. Tabellen, die du explizit mit JOIN einbindest, sollst du nicht zusätzlich noch in der FROM-Klausel einbinden. In deinem Fall könnte dann dei Abfrage etwa so aussehen:
PHP-Code:
SELECT     
    s
.id,
    
s.datum,
    
s.kategorien,
    
s.bundeslaender,
    
s.anstellungsverhaeltnisse,
    
f.name,        
    
r.name,
    
b.name,
    
b.id,
    
k.id,
    
a.id 
FROM 
    stellenanzeigen 
AS s
INNER JOIN 
    kategorien 
AS k ON s.kategorien k.id 
INNER JOIN 
    bundeslaender 
AS b ON s.bundeslaender b.id 
INNER JOIN 
    firmen 
AS f b ON s.firma f.id 
INNER JOIN 
    anstellungsverhaeltnisse 
AS a ON s.anstellungsverhaeltnisse a.id 
INNER JOIN 
    rubriken 
AS r b ON s.rubriken r.id 
WHERE 
    k
.id 
  
AND 
      
b.id 16 
  
AND 
      
a.id 
ORDER BY 
    s
.id 
LIMIT 20 
Da ich schreibfaul bin, benutze ich Aliases, was nach meiner Meinung die Leserlichkeit ebenfalls erhöht. Ausserdem Frage ich mich, wozu du die vielen Id's überhaupt brauchst, aber das hat mit dem Problem nichts zu tun.
__________________
Gruss
H2O
Mit Zitat antworten
  #3 (permalink)  
Alt 25-02-2008, 15:50
Flip7
 Registrierter Benutzer
Links : Onlinestatus : Flip7 ist offline
Registriert seit: May 2007
Ort: Munich
Beiträge: 126
Flip7 ist zur Zeit noch ein unbeschriebenes Blatt
Flip7 eine Nachricht über ICQ schicken
Standard

ja das grad hatt NULL mit dem Problem zu tun!

also wenn du mehrer Datenbanken verbinden willst musst Du quasi die datenbank und den benutzernamen davor schreiben!
frag mich nicht, wieso nur die datenbank nicht langt.
ich weiß leider nicht mehr genau, ob zuerst datenbank oder username, da in meiner abfrage datenbankname mit dem user gleich ist :-D quasi z.B so:

intranet.intranet.table1.id = 55

intranet = user und datenbank
table1 = Tabelle
id = Feld

vergiss also die ganzen prefixe nicht!

greetz Flip

Edit: wenn du in einer datenbank arbeitest, musst du nur die prefixe für die externen datenbanken angeben, aber falsch ist es nicht, wenn man die aktuelle auch angibt!
__________________
Find Parties?
Partysuche

Geändert von Flip7 (25-02-2008 um 15:53 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 25-02-2008, 20:21
chris1980
 Newbie
Links : Onlinestatus : chris1980 ist offline
Registriert seit: Feb 2008
Beiträge: 9
chris1980 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

H2O Vielen Vielen Dank. Jetzt Klappt das Script. Man man hat mich das lange aufgehalten, danke.

Muss dir Recht geben "Ordnung ist das halbe Leben"
Jetzt versteh ich den Code auch viel besser und das arbeiten darin fällt viel leichter.
Ehrlich gesagt konnte ich mein Script jetzt halbieren.
Werde wohl mein ganzes Projekt jetzt nochmal überarbeiten.......
Mit Zitat antworten
  #5 (permalink)  
Alt 26-02-2008, 07:57
H2O
 PHP Junior
Links : Onlinestatus : H2O ist offline
Registriert seit: Jul 2007
Beiträge: 937
H2O ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von Flip7
ja das grad hatt NULL mit dem Problem zu tun!
also wenn du mehrer Datenbanken verbinden willst ...
Theoretisch hast du natürlich recht. Nur weiss Chris1980 gar nicht, was eine Datenbank ist. Deshalb bezeichnet er jede Tabelle als solche. Ist eigentlich aus seinem Code klar ersichtlich.
__________________
Gruss
H2O
Mit Zitat antworten
  #6 (permalink)  
Alt 26-02-2008, 12:57
Flip7
 Registrierter Benutzer
Links : Onlinestatus : Flip7 ist offline
Registriert seit: May 2007
Ort: Munich
Beiträge: 126
Flip7 ist zur Zeit noch ein unbeschriebenes Blatt
Flip7 eine Nachricht über ICQ schicken
Standard

achso Tabellen meint er :-D

also chris1980 pass auf:

Ein Datenbankserver besitzt Datenbanken.
Eine Datenbank besitzt Tabellen.
In den Tabellen erst stehen die Daten, nicht direkt in einer Datenbank!

Wenn du in einer Datenbank mit Tabellen arbeitest brauchst du i.d.R keine Prefixe, außer du nennst alle Primären Schlüssel z.B id siehe

Code:
Select * FROM x INNER JOIN y ON(id = id)

theoretisch könnte man das verarbeiten, weil wir sowieso nur 2 tabellen verknüpfen, aber mysql will hier:

Code:
Select * FROM x INNER JOIN y ON(y.id = x.id)
sobald etwas zweideutig wird oder über mehrere DATENBANKEN, ich wiederhole DATENBANKEN :-D geht musst du prefixe nehmen!

greetz Flip
__________________
Find Parties?
Partysuche
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:13 Uhr.