Webmaster Forum Logo Part 1 Webmaster Forum Logo Part 2
Webmaster Forum Logo Part 3
     
 
  :: Anmeldung

Benutzername:

Registrierung...

Passwort:

Passwort vergessen?

angemeldet bleiben


  
  :: Umfrage
Welche sozialen Netzwerke benutzt du regelmäßig?

 Facebook
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 73%
 keines
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 22%
 Google+
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 19%
 Twitter
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 11%
 Xing
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 schülerVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 meinVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 studiVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 MySpace
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%
 LinkedIn
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%

 ges. 393 Stimmen
 
  :: Buttons

Valid XHTML 1.0 Transitional

Josephine

Haudegen

Dabei seit: 30.04.2009

Beiträge: 624

 

1 Zum Seitenanfang

Montag, 23. Mai 2011, 10:45

mysqli und datenbanken verknüpfen

Hallo, hab mysqli für mich entdeckt :)

Aber wie verknüpfe bzw. ich zwei oder mehrere Datenbanken zusammen das eine Ausgabe draraus wird?

Bis jetzt siehts so aus:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$db = @new mysqli'localhost''root''''tabelle' );

    if (mysqli_connect_errno() == 0)
{
    $sql 'SELECT  `vorname`, 
                    `nachname`, 
                    `strasse`, 
                    `ort`, 
                    `hausnummer`,
                    `leistungen`, 
           FROM     `plugin_tour` 
           ORDER BY `nachname`';

    $ergebnis $db->prepare$sql );
    $ergebnis->execute();
    $ergebnis->bind_result$vorname$nachname$strasse$ort$leistungen );
    while ($ergebnis->fetch())
    {
              ....
    }
}
else
{
    echo 'Die Datenbank konnte nicht erreicht werden. Folgender Fehler trat auf: <strong>' .mysqli_connect_errno(). ' : ' .mysqli_connect_error(). '</strong>';
}
$db->close();


Jetzt ist es so das es noch viele unterschiedliche Leistungen gibt. Beispiel:

Herr Max Mustermann
Mustergasse 5
12345 Musterhausen

Bekommt folgende Leistungen:
- kleine Toilette
- Mobilisation
- verabreichung einer einfachen Mahlzeit
- Verbandswechsel
usw...

Ziel ist es später das ganze so auszugeben:

---- Kunden ------------- Adresse ------------ Leistugen ...................................
------------------------------------------------------------------
Mustermann, Max --- hier steht die Adresse ---- gefolgt von den bezogenen Leistungen -----
Müller, Hilde ---
Maier, Gerda ----
Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Josephine« (23. Mai 2011, 10:45)

 

cccpmik

Foren Gott

Dabei seit: 04.09.2007

Beiträge: 2 999

 

2 Zum Seitenanfang

Montag, 23. Mai 2011, 11:00

1. du verknüpfst 2 tabellen und nicht datenbanken miteinander
2. dein db design ist mist

ich würde es so machen

tabelle : user

id | name | surname | street | usw...

tabelle : leistungen

id | name_der_leistung

tabelle user_has_leistung

user_id | leistung_id <-- kombinierter primär schlüssel

du musst als DB Engine InnoDB verwenden (kein MyISAM)

dann kannste mit folgender SQL alle leistungen anzeigen lassen

PHP-Quelltext

1
2
3
4
5
$sql "SELECT *
FROM user u, leistungen l, user_has_leistungen ul
WHERe u.id =  ul.user_id 
AND l.id = ul.leistung_id
"


also in FROM kannst du unterschiedliche anzahl an tabellen angeben , dahinter kannst du alias namen vergeben für weniger tipparbeit.
in WHERE verknüpfste die Primär mit fremdschlüsseln

Hoffe das ist soweit verständlich

MFG
Mein kleines Projekt
-Cruel Online-
 

Josephine

Haudegen

Dabei seit: 30.04.2009

Beiträge: 624

 

3 Zum Seitenanfang

Montag, 23. Mai 2011, 12:46

Ich habs jetzt mal so verstanden, wie folgt. Müssen jetzt alle Leistungs ids in leistung_id rein? mit komma getrennt oder wie kann man sich das vorstellen?

MySQL-Abfrage(n)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
-- phpMyAdmin SQL Dump
-- version 3.3.9
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Erstellungszeit: 23. Mai 2011 um 12:42
-- Server Version: 5.5.8
-- PHP-Version: 5.3.5

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Datenbank: `vvolvows`
--

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `leistungen`
--

CREATE TABLE IF NOT EXISTS `leistungen` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ganzwaschung` int(1) DEFAULT NULL,
  `teilwaschung` int(1) DEFAULT NULL,
  `ausscheidung` int(1) DEFAULT NULL,
  `selbst_nahrung` int(1) DEFAULT NULL,
  `hilfe_nahrung` int(1) DEFAULT NULL,
  `peg` int(1) DEFAULT NULL,
  `lagern` int(1) DEFAULT NULL,
  `mobilisation` int(1) DEFAULT NULL,
  `behörde_arzt_besuche` int(1) DEFAULT NULL,
  `beheizen_wohnbereich` int(1) DEFAULT NULL,
  `einkaufen` int(1) DEFAULT NULL,
  `zubereitung_speisen` int(1) DEFAULT NULL,
  `reinigung_wohnung` int(1) DEFAULT NULL,
  `waschen_pflegen` int(1) DEFAULT NULL,
  `hausbesuch` int(1) DEFAULT NULL,
  `hausbesuch_erhöht` int(1) DEFAULT NULL,
  `erstgespräch` int(1) DEFAULT NULL,
  `beratungsbesuch` int(1) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Daten für Tabelle `leistungen`
--


-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `user`
--

CREATE TABLE IF NOT EXISTS `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `surname` varchar(20) NOT NULL,
  `street` varchar(20) NOT NULL,
  `number` varchar(4) NOT NULL,
  `postcode` int(5) NOT NULL,
  `city` varchar(20) NOT NULL,
  `sex` varchar(6) NOT NULL,
  `age` int(3) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Daten für Tabelle `user`
--


-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `user_has_leistung`
--

CREATE TABLE IF NOT EXISTS `user_has_leistung` (
  `user_id` int(2) NOT NULL,
  `leistung_id` int(2) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Daten für Tabelle `user_has_leistung`
--
Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.
 

cccpmik

Foren Gott

Dabei seit: 04.09.2007

Beiträge: 2 999

 

4 Zum Seitenanfang

Montag, 23. Mai 2011, 12:56

nein

user <-- hier stehen alle user drin
id | name | surname | street | postcode | city | sex | age
1 | max | Mustermann | musterstraße | 12345| musterstadt | männlich | 30

leistungen <-- hier stehen verfügbare leistungen drin

id | bezeichnung
1 | ganzwaschung
2 | teilwaschung
3 | ausscheidung

usw..

user_has_leistungen <-- hier ist die beziehung zwischen user und leistung

user_id | leistung_id
1 | 1 <-- user 1 bezieht leistung 1
1 | 2 <-- user 1 bezieht leistung 2
1 |3

2 | 3
2 | 5

3 | 5 <-- user 3 bezieht leistung 5
usw...

am besten du lädst dir das Programm mysql workbench runter, dort kannst du tabelle anlegen und dann die tabellen verknüpfen und mit forward engneering die grafischen tabellen ins phpmyadmin eintragen
Mein kleines Projekt
-Cruel Online-

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »cccpmik« (23. Mai 2011, 12:56)

 

Josephine

Haudegen

Dabei seit: 30.04.2009

Beiträge: 624

 

5 Zum Seitenanfang

Montag, 23. Mai 2011, 12:57

ok werde mir mal das workbench runterladen und ausprobieren, werde bestimmt nochmal fragen dann haben ;) thx für die schnelle Antwort
Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.
 

cccpmik

Foren Gott

Dabei seit: 04.09.2007

Beiträge: 2 999

 

6 Zum Seitenanfang

Montag, 23. Mai 2011, 12:59

das problem ist, dass ich nicht glaube , dass du mit dem mysql workbench auf eine mysqli die daten übertragen kannst, jedoch kannste bei forward engneering dir den sql befehl anschauen und copy und paste einfügen
Mein kleines Projekt
-Cruel Online-
 

Josephine

Haudegen

Dabei seit: 30.04.2009

Beiträge: 624

 

7 Zum Seitenanfang

Montag, 23. Mai 2011, 13:05

ja es muss nicht mysqli sein, dachte das wär ein gutes mittel zum zweck, aber ich wusste noch das es über innodb ging, aber hab jetzt schon lang nix mehr in sachen programmieren gemacht und war etwas aus der übung :) ausserdam ist innodb ja seit 5.irgendwas standart :) Was mir ja gerade eben zugute kam
Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.
 

lorenz

Haudegen

Dabei seit: 05.11.2002

Beiträge: 647

 

8 Zum Seitenanfang

Montag, 23. Mai 2011, 13:13

wenn es nur um die 18 Leistungen geht und es nicht arg viel mehr mit der zeit werden ist das system aber schon ein wenig groß ausgelegt du könntest dir sonst mal den daten type SET angucken das könnte vielleicht ainiges erleichtern ;)

mfg LA
 

Josephine

Haudegen

Dabei seit: 30.04.2009

Beiträge: 624

 

9 Zum Seitenanfang

Montag, 23. Mai 2011, 13:43



Irgendwie komm ich net so ganz klar mit dem Teil. Stimmt das was ich das fapriziert hab?
Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.
 

cccpmik

Foren Gott

Dabei seit: 04.09.2007

Beiträge: 2 999

 

10 Zum Seitenanfang

Montag, 23. Mai 2011, 13:54

nicht ganz, die leistung tabelle ist nicht so wie ich es gesagt habe, und die verknüpfungen sind keine 1:n beziehungen und die linien müssen durchgezogen sein und leistungen müssen mit user_has_leistungen verbunden sein.. das was du da jetzt hast, ist totaler unfug:P

wenn du deine spalten in den leistungen behalten willst, dann brauchste in der tabelle leistungen eine user id, das machste , in dem du 1:n beziehung auswählst(mit durchgestrichener linie) klickst einmal user tabelle an und dann leistungen. und user_has_leistungen braucht man dann nicht.

wie gesagt, erstelle 2 tabellen, user und leistungen. lege die felder für user an und für leistungen NUR eine id und bezeichnung. danach haste eine auswahl an der linken seite , ein n:m beziehung mit durchgezogener linie, dieser klickste an und wählst die tabellen nacheinander aus und schon kriegste automatisch eine 3e tabelle user_has_leistungen..
Mein kleines Projekt
-Cruel Online-

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »cccpmik« (23. Mai 2011, 13:54)

 

Josephine

Haudegen

Dabei seit: 30.04.2009

Beiträge: 624

 

11 Zum Seitenanfang

Montag, 23. Mai 2011, 14:09

Edit: Achso die tabelle leistungen hat nur id und bezechnung nicht die ganzen leistungen. dafür gibts dann ne extra tabelle? ok ich versuch das mal mom...

Mhhh, wo kann ich den sehen was es für ein Beziehung hat? Find das nicht, aber ich habs hinbekommen das es druchgezogene Linien sind. Nein ich will es so machen wie du es gesagt hast, über die tabelle user has leistungen. Ich hab jetzt in der Tabelle User und der Tabelle leistungen jeweils ein foreign key mit user has leistungen zur tabelle user has leistungen.... warscheinlich ist das imm noch falsch aber vielleicht auf dem Richtigen weg :rolleyes:

Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Josephine« (23. Mai 2011, 14:09)

 

cccpmik

Foren Gott

Dabei seit: 04.09.2007

Beiträge: 2 999

 

12 Zum Seitenanfang

Montag, 23. Mai 2011, 14:18

ja ist fast richtig aber du ignorierst mich ich habe gesagt tabelle leistungen hat NUR ID UND BEZEICHNUNG :D NICHTS ANDERES

bezeichnung ist ein varchar 45 oder so

EDIT: art der beziehung siehste an der darstellung der verindung >| bedeutet n und || bedeutet 1

n:m beziehung ist im grunde n:1 1:n beziehung

EDIT zu deinem EDIT: die bezeichnungen wie "waschen" ,"pflegen" etc stehen dann IN der tabelle als WERTE

EDIT2: die leistungen als Spaltennamen zu erstellen ist Quatsch weil: Angenommen später kommt eine leistung dazu, dann musst du eine weitere Spalte anlegen und dann? was passiert mit den user die vorher eingetragen wurden sind? wenn du den namen der leistung aber in der datenbank abspeicherst, kannst du bequem in der tabelle user_has_leistung die neu erstelle leistung einem user zuordnen, bzw entfernen.
Mein kleines Projekt
-Cruel Online-

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »cccpmik« (23. Mai 2011, 14:18)

 

stfschaefer

Routinier

Dabei seit: 21.08.2010

Beiträge: 251

 

13 Zum Seitenanfang

Freitag, 27. Mai 2011, 15:21


EDIT2: die leistungen als Spaltennamen zu erstellen ist Quatsch weil: Angenommen später kommt eine leistung dazu, dann musst du eine weitere Spalte anlegen und dann? was passiert mit den user die vorher eingetragen wurden sind? wenn du den namen der leistung aber in der datenbank abspeicherst, kannst du bequem in der tabelle user_has_leistung die neu erstelle leistung einem user zuordnen, bzw entfernen.


Man muss dann die Tabelle erweitern und das bedeutet Verwaltungsaufwand. Dieser ist dann ein vollständiges Umkopieren der Tabelle Leistungen.

Wenn man, wie du die Werte in einer Schlüsseltabelle ablegt und dann nur diese verwaltet so ist ein Zufügen einer neuen Leistung eine neue Zeile in der Tabelle.
Das heisst, es wird nicht mehr die ganze Tabelle umkopiert.

Mfg
 

Josephine

Haudegen

Dabei seit: 30.04.2009

Beiträge: 624

 

14 Zum Seitenanfang

Freitag, 27. Mai 2011, 15:40

Ja ich habs inzwischen kapiert :) Du hattest mir das ja schonmal erklärt, aber war schon lange her...
Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.
 

stfschaefer

Routinier

Dabei seit: 21.08.2010

Beiträge: 251

 

15 Zum Seitenanfang

Freitag, 27. Mai 2011, 17:23

Ja ich habs inzwischen kapiert :) Du hattest mir das ja schonmal erklärt, aber war schon lange her...



Ich denke, ich muss den Exkurs über Schlüsseltabellen doch zu Ende schreiben.

Wenn ich Zeit habe, werde ich es machen.

Mfg
 

Josephine

Haudegen

Dabei seit: 30.04.2009

Beiträge: 624

 

16 Zum Seitenanfang

Freitag, 27. Mai 2011, 18:08

Stell ihn dann am besten unter Tutorials rein, dann findet man ihn besser :D
Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.
 

stfschaefer

Routinier

Dabei seit: 21.08.2010

Beiträge: 251

 

17 Zum Seitenanfang

Freitag, 27. Mai 2011, 18:41

Dazu muss ich ihn erst mal fertigstellen.

Kann ich den Thraet dann selbst verschieben oder muss ich einen Admin bitten.


:thumbsup: :D
 

Ähnliche Themen