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

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)
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
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
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-
-Cruel Online-
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.
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
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-
-Cruel Online-
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »cccpmik« (23. Mai 2011, 12:56)
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-
-Cruel Online-
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
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.
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
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..

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-
-Cruel Online-
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »cccpmik« (23. Mai 2011, 13:54)
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
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
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)
ja ist fast richtig aber du ignorierst mich ich habe gesagt tabelle leistungen hat NUR ID UND BEZEICHNUNG
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.
NICHTS ANDERESbezeichnung 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-
-Cruel Online-
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »cccpmik« (23. Mai 2011, 14:18)
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
Ähnliche Themen
-
Foren-, Blog- und Content-Managementsysteme »-
Forenumzug: Benötige Hilfe
(14. Februar 2009, 10:22)
-
Datenbanken »-
mysqli oder normales MySQL?
(13. September 2008, 19:55)
-
PHP »-
Server-Meldungen unterdrücken?
(5. Juli 2008, 18:01)



thx für die schnelle Antwort 