php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 10.03.2010, 03:58  
Neuer Benutzer
 
Registriert seit: 28.02.2010
Beiträge: 9
PHP-Kenntnisse:
Anfänger
babybone befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Abfrage Select

Habe drei Tabellen

PHP-Code:
CREATE TABLE  `kunden` (
  `
knrint(11NOT NULL AUTO_INCREMENT,
  `
namevarchar(30NOT NULL,
  `
vornamevarchar(30NOT NULL,
  
PRIMARY KEY (`knr`)
ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=;


CREATE TABLE `produkte` (
  `
pnrint(11NOT NULL AUTO_INCREMENT,
  `
bezeichnungvarchar(30NOT NULL,
  
PRIMARY KEY (`pnr`)
ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=;

INSERT INTO `produkte` (`pnr`, `bezeichnung`) VALUES
(1'Homepage'),
(
2'Flyer'),
(
3'Logo'),
(
4'Druck');


CREATE TABLE `notizen` (
  `
nnrint(11NOT NULL AUTO_INCREMENT,
  `
knrint(11NOT NULL,
  `
pnrint(11NOT NULL,
  `
datumdate NOT NULL,
  `
notiztext NOT NULL,
  
PRIMARY KEY (`nnr`),
  
KEY `knr` (`knr`),
  
KEY `pnr` (`pnr`)
ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=

Wie würde die Select-Abfrage lauten um folgende Ausgabe zu erhalten?

Kundennummer
Name
Produkt-Bezeichnung1
Notiz1 + Datum
Notiz2 + Datum
Notiz3 + Datum

Produkt-Bezeichnung2
Notiz1 + Datum
Notiz2 + Datum
Notiz3 + Datum


Produkt-Bezeichnung3
Notiz1 + Datum
Notiz2 + Datum
Notiz3 + Datum

Bitte nicht zu kompliziert erklären, bin Anfängerin. Hoffe aber das mir einer bei der Lösung helfen kann.
babybone ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 10.03.2010, 07:37  
thomas_w
Gast
 
Beiträge: n/a
Standard

Das Datenmodell sieht ja ganz gut aus und wenn ich mich nicht vertippt habe, dann wäre die folgende Abfrage mal ein erster Schritt. Alle notwendigen Tabellen werden per JOIN zusammen gezogen und die gewünschten Tabellenspalten ausgegeben.

Code:
SELECT k.knr, k.name, p.bezeichnung, n.notiz, n.datum
  FROM kunden k
  JOIN notizen n
    ON k.knr = n.knr
  JOIN produkte p
    ON p.pnr = n.pnr
ORDER BY k.knr
Was ist jetzt nicht verstanden habe ist die Auflistung Notiz1, Notiz2 etc..

Zitat:
Produkt-Bezeichnung1
Notiz1 + Datum
Notiz2 + Datum
Notiz3 + Datum

Produkt-Bezeichnung2
Notiz1 + Datum
Notiz2 + Datum
Notiz3 + Datum


Produkt-Bezeichnung3
Notiz1 + Datum
Notiz2 + Datum
Notiz3 + Datum
Sollen pro Kunde Kunde 3 Notizen ausgegeben werden?

Grüße
Thomas
  Mit Zitat antworten
Alt 10.03.2010, 08:35  
Neuer Benutzer
 
Registriert seit: 28.02.2010
Beiträge: 9
PHP-Kenntnisse:
Anfänger
babybone befindet sich auf einem aufstrebenden Ast
Standard

Da ja jeder Kunde mehrere Produkte haben kann, sollen Notizen erstellt werden. Also zu einem Produkt mehrere Notizen.

PHP-Code:
Produkt-Bezeichnung1Homepage
Notiz1
Kunde xy möchte eine HP in blau haben 1. Januar
Notiz2
kunde xy möchte seine HP doch lieber in rot 2. Januar
...

Produkt-Bezeichnung2Flyer
Notiz1
Flyer soll  3-lagig sein 1. Januar
Notiz2
Flyer soll einen Einleger bekommen 3. Januar
... 
babybone ist offline   Mit Zitat antworten
Alt 10.03.2010, 08:49  
Erfahrener Benutzer
 
Registriert seit: 25.09.2009
Beiträge: 2.044
PHP-Kenntnisse:
Fortgeschritten
BlackScorp wird schon bald berühmt werdenBlackScorp wird schon bald berühmt werden
Standard

versuchs mal so
Code:
SELECT p.bezeichnung, n.notiz, n.datum
FROM kunden k, produkte p, notizen n
WHERE k.knr = n.knr
AND p.pnr = n.pnr
ORDER BY p.pnr ASC
__________________
Mein kleines Projekt
-Cruel Online-
5 von 3 Leuten können kein Bruchrechnen
BlackScorp ist offline   Mit Zitat antworten
Alt 10.03.2010, 09:24  
thomas_w
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von babybone Beitrag anzeigen
Da ja jeder Kunde mehrere Produkte haben kann, sollen Notizen erstellt werden. Also zu einem Produkt mehrere Notizen.
Dann fehlt noch die Sortierung nach Kundenname und Projekt-Nr (siehe auch die Antwort von @BlackScorp ) oder nach Projekt-Bezeichnung

Code:
SELECT k.knr, k.name, p.bezeichnung, n.notiz, n.datum
  FROM kunden k
  JOIN notizen n
    ON k.knr = n.knr
  JOIN produkte p
    ON p.pnr = n.pnr
ORDER BY k.name, p.bezeichnung 
Die Darstellung der Daten, wie oben beschrieben (Einmal Kunde und drunter mehrere Zeilen der zugehörigen Projekte) wäre dann Aufgabe des PHP-Skripts.

Grüße
Thomas
  Mit Zitat antworten
Alt 10.03.2010, 10:26  
Neuer Benutzer
 
Registriert seit: 28.02.2010
Beiträge: 9
PHP-Kenntnisse:
Anfänger
babybone befindet sich auf einem aufstrebenden Ast
Standard

Ich hab folgendes erstellt, was mir schon ganz gut gefällt. Die Kundennummer wird per GET von einer Kundenliste übermittelt.

PHP-Code:
$knr=$_GET['knr'];
echo 
"KundenNr: "$knr ."<br>";

$sql "SELECT k.name, p.bezeichnung, n.notiz, n.datum
  FROM kunden k
  JOIN notizen n
    ON k.knr = n.knr
  JOIN produkte p
    ON p.pnr = n.pnr
  WHERE k.knr = $knr
  ORDER BY k.knr"
;
$data=mysql_query($sql);
while (
$ergebnis mysql_fetch_object ($data)) {

echo 
"<br>";
echo 
$ergebnis->bezeichnung ."<br>";
echo 
$ergebnis->datum ."<br>";
echo 
$ergebnis->notiz ."<br>";

Ausgabe:
PHP-Code:
KundenNr1029

Homepage
2010
-03-06
und 
die notiz zur homepage

Flyer
2010
-03-05
notizen

Flyer
2010
-03-25
neue notiz

Flyer
2010
-03-03
wo geht 
die notiz hin?

Logo
2010
-03-05
Erste Notiz zum Logo 
Geht es, das ich die Bezeichnung nur einmal hab, aber trotzdem die Notizen untereinander? Wenn ja wie?

Beispiel:
Soll (wäre schön):
PHP-Code:
KundenNr1029

Homepage
2010
-03-06
und 
die notiz zur homepage

Flyer
2010
-03-05
notizen

2010
-03-25
neue notiz

2010
-03-03
wo geht 
die notiz hin?

Logo
2010
-03-05
Erste Notiz zum Logo 
babybone ist offline   Mit Zitat antworten
Alt 10.03.2010, 10:53  
thomas_w
Gast
 
Beiträge: n/a
Standard

Am Rande bemerkt:
Da $knr numerisch ist, hilft die Typumwandlung (int) diverse Sicherheitsprobleme zu lösen.

Zitat:
Zitat von babybone Beitrag anzeigen
Code:
$knr= (int) $_GET['knr'];
echo "KundenNr: ". $knr ."<br>";

$sql = "SELECT k.name, p.bezeichnung, n.notiz, n.datum
  FROM kunden k
  JOIN notizen n
    ON k.knr = n.knr
  JOIN produkte p
    ON p.pnr = n.pnr
  WHERE k.knr = $knr
  ORDER BY k.knr";
$data=mysql_query($sql);
while ($ergebnis = mysql_fetch_object ($data)) {

echo "<br>";
echo $ergebnis->bezeichnung ."<br>";
echo $ergebnis->datum ."<br>";
echo $ergebnis->notiz ."<br>";
}
nicht schön, aber selten wäre z. B. folgende Lösung. Mit der Variablen $sBezeichnung_alt merkst Du Dir einfach den Wert der vorherigen Datenzeile. ISt er unterschiedlich (also neu) dann ausgeben, wenn bei gleich sind, keine Ausgabe der Bezeichnung.

PHP-Code:
$sBezeichnung_alt null;
$data=mysql_query($sql);
while (
$ergebnis mysql_fetch_object ($data)) {
echo 
"<br>";
if (
$sBezeichnung_alt <> $ergebnis->bezeichnung ) {
 
$sBezeichnung_alt $ergebnis->bezeichnung
 echo 
$ergebnis->bezeichnung ."<br>";
 

echo 
$ergebnis->datum ."<br>";
echo 
$ergebnis->notiz ."<br>";

Grüße
Thomas
  Mit Zitat antworten
Alt 10.03.2010, 11:33  
Neuer Benutzer
 
Registriert seit: 28.02.2010
Beiträge: 9
PHP-Kenntnisse:
Anfänger
babybone befindet sich auf einem aufstrebenden Ast
Standard

Das ist aber das was ich haben wollte. Ich Danke für die Hilfe.
babybone 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
Problem mit Abfrage - join, inner join, distinct? Gachet01 Datenbanken 2 27.01.2011 06:49
[Erledigt] hilfe bei db Abfrage mit Kathegorien hups Datenbanken 4 09.12.2009 22:45
multiple mysql_qerry SELECT * FROM "" WHERE abfrage!? Offshore PHP Tipps 2009 11 14.11.2009 22:11
Teilnahmeverzeichnis/Dienstplan. linus-johannes PHP Tipps 2009 2 03.11.2009 16:15
[Erledigt] INSERT ... SELECT - nicht alle Spalten aus dem Select benutzen? kip Datenbanken 4 01.09.2009 13:06
[Erledigt] Tabelle erstellt - SELECT Abfrage nicht möglich Lightware Datenbanken 14 07.03.2009 17:31
Performance bei select abfrage Diet Datenbanken 4 14.05.2006 21:20
Mysql SELECT Abfrage -- Problem mit LIMIT djrace Datenbanken 2 01.05.2006 12:58
[JavaScript] Event Handler in form select - Syntax? winfo_cologne HTML, Usability und Barrierefreiheit 5 29.03.2006 16:47
SELECT WHERE datetime abfrage - Optimierung mrSpok Datenbanken 15 23.03.2006 19:08
[Erledigt] select Abfrage Datenbanken 6 07.02.2006 17:32
Select Abfrage mit where-clause + if-Restriktion Datenbanken 4 25.07.2005 03:46
SELECT Abfrage.... seh den wald nich... center Datenbanken 8 01.06.2005 14:32
hochkommas in select abfrage.. ich raffe es nicht. hekto PHP Tipps 2005 31 22.01.2005 18:03
[Erledigt] [gelöst] MySQL abfrage eingrenzen anhand einer SELECT Auswah Datenbanken 13 01.12.2004 18:42

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
select php where, select * from where datum = date() php, select abfragen $_get, select * from not null php

Alle Zeitangaben in WEZ +1. Es ist jetzt 07:32 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