php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 04.01.2009, 13:04  
Erfahrener Benutzer
 
Benutzerbild von djscaleo
 
Registriert seit: 19.10.2008
Beiträge: 384
PHP-Kenntnisse:
Fortgeschritten
djscaleo kann nur auf Besserung hoffen
djscaleo eine Nachricht über ICQ schicken djscaleo eine Nachricht über Skype™ schicken
Standard Wiemache ich eine Abfrage über 3 Tabellen???

Hi!
Das eine meiner Probleme hat sich nun erledigt, aber nun habe ich dann wieder mal ein neues Problem...

Ich habe 3 Tabellen:
Code:
-> Produkte
-> Kunden
-> Temp
Jetzt habe ich in der Temp-Tabelle im Feld artikelnummer zum Beispiel die nummer 37970940 stehen. Dann soll die Abfrage aus der Produkt- Datenbank die Daten des produktes holen. Das ist auch kein Problem. Nun komme ich aber nicht weiter: In der Produkt-Datenbank steht dann ein Feld erstell_user.
Die Abfrage soll dann noch aus der Kunden-Datenbank Daten herausziehen.
Gebraucht werden dabei nur die Kunden-Datenbank-Daten. Es soll nämlich dann später mit Group By herausgefunden werden, wer die Produkte, die in Temp aufgelistet sind, erstellt hat.

Kann mir da jemand helfen???

MfG. DjScaleo

Hier noch mal als Zeichnung:
Code:
1. Temp enthältdie Nummer 37970940.

2. Abfrage sucht in der Artikeldatenbank nach dem Artikel 
   mit der Nummer 37970940 und schaut dort nur nach dem
   feld erstell_user.

3. Die Abfrage such nun aus der Kunden-Datenbank alle Kunden,
   die im Feld login_user einen der Namen enthalten, der 
   in der vorherigen Abfrage herausgesucht wurde.


Temp:       Produkte:          Kunden:
37970940 -> 37970940
            djscaleo     ->    djscaleo

                               Hier aus 
                               diesem 
                               Datensatz
                               werden Alle
                               Daten 
                               abgerufen,
                               also SELECT *
djscaleo ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 04.01.2009, 13:15  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Deine Informationen sind leider etwas rudimentär, der Aufbau deiner Tabellen bleibt unbekannt. Und der Sinn der temp-Tabelle erschliesst sich mir auch nicht.
Aber wie auch immer, du brauchst einen Join über alle drei Tabellen, etwa so:
Code:
SELECT
    k.id
    k.nname
    k.adresse,
    k.irgendwas,
    ...
FROM
    temp t
INNER JOIN
    produkte p ON t.nummer = p.artikelnummer
INNER JOIN
    kunden k ON p.kundennummer = k.id
Und bei JOINS erst recht kein SELECT * FROM.
__________________
Gruss
L
lazydog ist offline   Mit Zitat antworten
Alt 04.01.2009, 13:46  
Erfahrener Benutzer
 
Benutzerbild von djscaleo
 
Registriert seit: 19.10.2008
Beiträge: 384
PHP-Kenntnisse:
Fortgeschritten
djscaleo kann nur auf Besserung hoffen
djscaleo eine Nachricht über ICQ schicken djscaleo eine Nachricht über Skype™ schicken
Standard

Also erst einmal danke für die schnelle Hilfe!

Hiermal meine drei Tabellen:


Produkte

Feld Typ Null Standard Kommentare
id int(11) Nein hauptcat varchar(50) Nein
undercat varchar(50) Ja NULL
titel varchar(100) Nein
undertitel varchar(100) Ja NULL
shortinfo text Nein
details text Nein
preis varchar(50) Nein
artikelnummer varchar(50) Nein
ean varchar(50) Ja NULL
hersteller varchar(50) Ja NULL
bild varchar(200) Ja NULL
anzahl varchar(50) Nein -
versandkosten varchar(25) Nein
gueltig_von date Nein 1991-01-01
gueltig_bis date Nein 2099-12-31
erstell_date text Nein
erstell_user varchar(50) Nein
last_bearbeitung_date text Nein
last_bearbeitung_user varchar(50) Nein


kunden

Feld Typ Null Standard Kommentare
id
int(50) Nein
login_user varchar(50) Ja NULL
name varchar(150) Ja NULL
vorname varchar(50) Ja NULL
adresse varchar(150) Ja NULL
plz varchar(25) Nein
ort varchar(50) Nein
email text Ja NULL
newsletter varchar(50) Ja NULL


temp

Feld Typ Null Standard Kommentare
id int(50) Nein
ip varchar(50) Nein
artikelnummer varchar(100) Nein

Aber irgendwie habe ich noch ein kleines Problem:
Was bedeuetet z.B. das p hinter produkte?
djscaleo ist offline   Mit Zitat antworten
Alt 04.01.2009, 14:10  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von djscaleo Beitrag anzeigen
Was bedeuetet z.B. das p hinter produkte?
Das ist ein Alias, wenn es dir besser gefällt, kannst du auch
Code:
produkte AS p
schreiben
__________________
Gruss
L
lazydog ist offline   Mit Zitat antworten
Alt 04.01.2009, 14:19  
erc
Erfahrener Benutzer
 
Registriert seit: 02.01.2009
Beiträge: 730
PHP-Kenntnisse:
Fortgeschritten
erc wird schon bald berühmt werden
Standard

Zitat:
Zitat von djscaleo Beitrag anzeigen
Aber irgendwie habe ich noch ein kleines Problem:
Was bedeuetet z.B. das p hinter produkte?
Das p ist ein Aliasname für die Tabelle. Damit sprichst du die Tabelle produkte in dem aktuellen Query nur noch mit p an. Das kannst du auch weglassen: (was ich sogar empfehlen würde)

PHP-Code:
SELECT
    kunden
.id
    kunden
.name
    kunden
.adresse,
    
kunden.irgendwas,
    ...
FROM
    temp INNER JOIN
    produkte ON temp
.nummer produkte.artikelnummer INNER JOIN
    kunden ON produkte
.kundennummer kunden.id 

Ich find das immer absolut schrecklich. Wieso macht man aus sowas Aussagekräftigen wie produkte ein p? Interessant ist das immer in größeren Projekten. Dann ist in einem query p produkte, im nächsten product_details, und im übernächsten kunde.
erc ist offline   Mit Zitat antworten
Alt 04.01.2009, 14:32  
Erfahrener Benutzer
 
Benutzerbild von djscaleo
 
Registriert seit: 19.10.2008
Beiträge: 384
PHP-Kenntnisse:
Fortgeschritten
djscaleo kann nur auf Besserung hoffen
djscaleo eine Nachricht über ICQ schicken djscaleo eine Nachricht über Skype™ schicken
Standard

Also ich habe jetzt auf einer anderen Seite etwas mit JOIN gefunden.

Meine Datei ist soweit auch erst einmal fertig, aber ich bekomme immer QUERY WAS EMPTY ausgegeben...

PHP-Code:
<?php

// Diese Datei erstellt die Rechnungen für Kunde & Anbieter
// und speichert Sie im Ordner Rechnungen als *.htm File.
// Zusätzlich werden die rechnungen in den Datenbanktabellen
// rechnungen_kunde & rechnungen_anbieter verschlüsselt 
// gespeichert. 
// Der Kunde ird auf die Datenbank zugreifen, die *.htm Files 
// werden mit der Rechnungsmail versendet und nach 1 Monat,
// also nach Ablauf des Wiederrufsrechtes, gelöscht.


// Hier werden header und Footer festgelegt, da sich dort keine
// Daten befinden, die duch Datenbanken geändert werden:
$header '<html>\n <head>\n  <titel>Rechnung von SkyShop.de.vu</titel>\n </head>\n\n <body>\n  <div width="800">  \n  <div align="right"><img src="http://www.SkyShop.de.vu/images/logo.PNG"></div>\n';
$footer '<div align="center">www.SkyShop.de.vu\nGebührenfrei an- und verkaufen für jedermann, also 100% Gewinn für Sie!</div>\n </div>\n </body>\n</html>\n';


// Hier wird die Adresse des Empfängers abgerufen:
$query "SELECT * FROM kunden WHERE login_user = '$userdata[Username]'";
$result mysql_query($query) OR die(mysql_error());
while(
$row mysql_fetch_array($result)){

$adress '<br><br><br><br><br><br>'.$row[vorname].' '.$row[name].'<br>\n'.$row[adresse].'<br>\n'.$row[plz].' '.$row[plz].'<br><br><br><br><br>';

$kdnr $row[id];
}


// Nun die Rechnungsnummer. Dafür erstellen wir schon einmal
// den Rechnungsdatensatz für den Kunden um eine Nummer zu
// erhalten.
$insert_rechnungstext "INSERT INTO rechnungen_kunde
                        (
                        Kunden-Nr,
            Kunden-IP
                        )
                        VALUES
                        (
            '$kdnr',
            '$ip'
                        );"
;

$result mysql_query($insert_product) OR die(mysql_error());

$query "SELECT * FROM rechnungen_kunde WHERE Kunden-Nr = '$kdnr' AND Kunden-IP = '$ip' AND sended = 0";
$result mysql_query($query) OR die(mysql_error());
while(
$row mysql_fetch_array($result)){

$rechnungsnummer '<b>Rechnung '.$row[ID].'</b>';

}


// Jetzt brauchen wir noch die Kunden-bestelldaten:
$kundendaten 'Kunden-Nr.: <div width="100">'.$kdnr.'</div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Kunden-IP: <div width="100">'.$ip.'</div><br>Bestellt von: <div width="100">'.$userdata[Username].'</div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bestellt am: <div width="100">'.$datum.'</div>';


// Nun den Warenkorb auslesen und in die Rechnung schreiben
$query "SELECT Produkte.artikelnummer, Produkte.ean, Produkte.titel, Produkte.undertitel, Produkte.preis, count(Produkte.artikelnummer) As menge, temp.id FROM temp, Produkte WHERE ip = '$ip' AND Produkte.artikelnummer = temp.artikelnummer GROUP BY Produkte.artikelnummer ORDER BY id";
$result mysql_query($query) OR die(mysql_error());

$waren_header '<table width="100%">\n<tr>\n<td border-bottom="1px"><b>Menge</td>\n<td border-bottom="1px">Artikelnummer</td>\n<td border-bottom="1px">EAN</td>\n<tdborder-bottom="1px">Titel</td>\n<td border-bottom="1px">Untertitel</td>\n<td border-bottom="1px">Einzelpreis</td>\n<td border-bottom="1px">Summe</b></td></tr>\n';

while(
$row mysql_fetch_array($result)){

$summe_preis$row[preis] * $row[menge];
$summe_preis number_format($summe_preis2','' ');

$preis number_format($row[preis], 2','' ');

$waren_body = (string)'';
$waren_body .= '
     <tr>
      <td>'
.$row[menge].'</td>
      <td>'
.$row[artikelnummer].'</td>
      <td>'
.$row[ean].'</td>
      <td>'
.$row[titel].'</td>
      <td>'
.$row[undertitel].'</td>
      <td>'
.$preis.' '.$waerungszeic.'</td>
      <td><b>'
.$summe_preis.' '.$waerungszeic.'</b></td>
     </tr>
    '
;

}

$waren_versandkosten '<tr><td></td><td></td><td></td><td></td><td></td><td><div align="right">Versandkosten:</div></td><td border-top="1px" border-bottom="1px"><b>'.$_SESSION['versandkosten'].' '.$waerungszeic.'</b></td></tr>';
$waren_gesamtsumme   '<tr><td></td><td></td><td></td><td></td><td></td><td><div align="right">Gesamt:</div></td><td><b>'.$_SESSION['gesamtpreis'].' '.$waerungszeic.'</b></td><td> </td></tr></table>';

$warenliste ''.$waren_header.' '.$waren_body.' '.$waren_versandkosten.' '.$waren_gesamtsumme.'';


// Jetzt werden noch die Händlerdaten rausgesucht:
$query "SELECT kunden.name, kunden.vorname, kunden.adresse, kunden.plz, kunden.ort FROM kunden, Produkte, temp WHERE temp.ip = '$ip' AND Produkte.artikelnummer = temp.artikelnummer AND Produkte.erstell_user = kunden.login_user";
$result mysql_query($query) OR die(mysql_error());

while(
$row mysql_fetch_array($result)){

    
$anbieter_header '<table width=100%"><tr>';
    
$anbieter_body = (string)'';
    
$anbieter_body .= '<td>'.$row[vorname].' '.$row[name].'<br>'.$row[adresse].'<br>'.$row[plz].' '.$row[ort].'</td>';
    
$anbieter_footer '</tr></table>';

}

$anbieter_liste ''.$anbieter_header.' '.$anbieter_body.' '.$anbieter_footer.'';


// Zum Schluss noch der hinweiß mit dem Preis:
$attention 'Achtung!<br>Dies ist nur eine voraussichtliche Rechnung, da SkyShop die Versandkosten nur ungefähr berechnet.<br>Sie werden von jedem Anbieter, bei dem Sie einkaufen eine eigene, genaue Rechnung erhalten.';


// Nun noch alleszusammenbauen:
$rechnung ''.$header.' <hr> '.$adress.' '.$rechnungsnummer.' <hr> '.$kundendaten.' <hr> '.$warenliste.' <hr> '.$anbieterliste.' <hr> '.$attention.' <hr> '.$footer.'';


// Zum test noch ausgeben:
echo $rechnung;
Ich habe auch schon den JOIN teil rausgelassen, QUERY bleibt aber.

HTML und E_MAIl erstellen hab ich weggelassen
djscaleo ist offline   Mit Zitat antworten
Alt 04.01.2009, 16:31  
Neuer Benutzer
 
Registriert seit: 03.01.2009
Beiträge: 25
freggeln befindet sich auf einem aufstrebenden Ast
Standard

Die Query sollte auf jeden Fall anders zusammengesetzt sein

Code:
$query = "SELECT * FROM kunden WHERE login_user = '".$userdata[Username]."'";
Gruß
freggeln ist offline   Mit Zitat antworten
Alt 04.01.2009, 16:58  
erc
Erfahrener Benutzer
 
Registriert seit: 02.01.2009
Beiträge: 730
PHP-Kenntnisse:
Fortgeschritten
erc wird schon bald berühmt werden
Standard

Zitat:
Zitat von freggeln Beitrag anzeigen
Die Query sollte auf jeden Fall anders zusammengesetzt sein

Code:
$query = "SELECT * FROM kunden WHERE login_user = '".$userdata[Username]."'";
Das Orginal ist auf jedenfall richtiger als dein Vorschlag. Wenn schon dann so:

Code:
$query = "SELECT * FROM kunden WHERE login_user = '".$userdata['Username']."'";
aber es spricht auch nix gegen das Orginal
Zitat:
$query = "SELECT * FROM kunden WHERE login_user = '$userdata[Username]'";
oder gegen

Zitat:
$query = "SELECT * FROM kunden WHERE login_user = '{$userdata['Username']}'";
Da kommt überall das selbe bei raus. Dein Code würde zwar auch funktionieren, erzeugt aber eine notice weil die Konstante Username nicht existiert.
erc ist offline   Mit Zitat antworten
Alt 05.01.2009, 10:46  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.654
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo DjScaleo,

ich habe einige deiner Posts verfolgt und du solltest IMHO für dein Problem auf eine Standard-Lösung setzen. Hier bietet sich das "Objekte werden in einer eigenen Tabelle gespeichert, ihre Beziehungen auch"-Konzept an. Mit diesem sehen auch deine Abfragen immer gleich aus und du musst dir nicht bei jeder neuen Abfrage Gedanken darüber machen.

Falls dich das interessiert, kannst du mal unter Adventure PHP Framework - Generischer OR Mapper vorbeischauen. Dort wird ein Tool vorgestellt, dass dir das Thema Datenhaltung abnimmt.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Abfrage über drei und mehr Tabellen querfisch Datenbanken 3 27.03.2007 21:12
SELECT über zwei Tabellen KingCrunch Datenbanken 9 23.03.2007 04:01
Update über zwei Tabellen tekknotrip Datenbanken 2 26.02.2007 16:25
MySQL Abfrage über 2 Tabellen Datenbanken 4 21.03.2006 11:44
Abfrage über zwei Tabellen (m. JOIN?) Spiff Datenbanken 3 13.02.2006 09:32
Abfrage mehrerer Tabellen per PHP (Code vereinfachen) PHP Tipps 2007 4 18.12.2005 12:34
Select über mehrere tabellen Sclot Datenbanken 14 24.11.2005 16:56
[Erledigt] MySQL Abfrage über mehrere Tabellen [Erledigt] Datenbanken 2 14.10.2005 13:37
Volltextsuche mit MATCH AGAINST über mehere Tabellen? Datenbanken 5 13.09.2005 15:02
[Erledigt] mysql abfrage über 4 Tabelle - bis 3 geht, bei der 4. habert Datenbanken 2 08.09.2005 11:59
Mysql Abfrage über 3 Tabellen in Verbidung mit COUNT() Datenbanken 8 29.06.2005 04:15
Mysql Abfrage über 3 Tabellen in Verbidung mit COUNT() PHP Tipps 2005-2 4 28.06.2005 07:47
Suchfkt. über mehrere Felder und 2 Tabellen Lia PHP Tipps 2005 14 11.01.2005 16:32
Mysql Abfrage über 2 Tabellen mit Verknüpfung zuner 3. Datenbanken 2 26.10.2004 16:36
Abfrage über 3 Tabellen PHP Tipps 2004 3 31.07.2004 22:34

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
eine abfrage, php abfrage aus 3 tabellen, mysql select mehrere tabellen über mapping_tabelle, abfrage über 3 tabellen, abfrage aus 3 tabellen, php mysql berechnen mehrere tabellen, temp feld mit nummerierung in abfrage, warenliste und rechnung erstellen, ist skyshopping erlaubt, kunden datenbank welche tabellen, ein mal nein rechnungen tabelle, aus 3 tabellen mache eine, php abfragen aus drei tabellen erstellen, html beispiel tabelle warenliste, tool für php abfragen, sql join mapping tabelle auslassen, eine abfrage erstellen aus mehreren tabelle, ean codes weglassen artikelnummer des herstellers, inner join liste aller verkauften artikel vom 11.01.2005, produktdatenbank tabelle php

Alle Zeitangaben in WEZ +2. Es ist jetzt 04:06 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum