php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 29.08.2007, 16:38  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard Abfrage richtig? Vereinfachen?

Hallo Leute,

ich komme jetzt mal mit einer etwas größeren Sache und hoff ich schaffe es zu erklären was ich versuche und ihr nehmt euch die Zeit mir zu helfen.

Hier erstmal mein Tabellenlayout:



Zu den Tabellen:

TM_geraete:
Hier sind Geräte aufgelistet mit einer eindeutigen ID und ob sie bereits installiert sind sagt eine 0 im Feld inststat.

TM_install:
Hier werden Termine für Installationen hineingeschrieben. Für ein Gerät können mehrere Termine (zwecks Verlauf, falls ein Termin abgesagt wurde) vorhanden sein. Das Feld active (nicht unbedingt erforderlich) sagt aus ob die Referenz zu phpr_termine noch vorhanden ist (tid als ID in phpr_termine vorhanden und in dem Datensatz von phpr_termine partstat > 0)

phpr_termine:
Enthält die Termine die wirklich im Kalender stehen. Abgesagte Termine werden gelöscht oder haben partstat = 0. Die Tabelle sollte möglichst nicht geändert werden.


Soo und jetzt zu dem was ich vorhabe!

Ich will eine Abfrage haben die mir alle nicht installierten Geräte auswählt, die dem aktuellen User zugeordnet sind und wo die Termine nicht abgesagt sind. Dazu brauche ich immer den aktuellsten Installationstermin vorschlag (TM_install).

Ich habe folgende Lösung dafür:



PHP-Code:
<? $sql "UPDATE TM_install SET active = 0";
mysql_query($sql) or die(mysql_error());

$sql "SELECT I.id FROM TM_install AS I, phpr_termine AS T WHERE I.tid = T.ID AND T.partstat > 0";
$qry mysql_query($sql) or die(mysql_error());


while(
$now mysql_fetch_assoc($qry))
{
  
$sql "UPDATE TM_install SET active = 1 WHERE id =".$now["id"];
  
mysql_query($sql) or die(mysql_error());
}

$sql "SELECT G.* FROM TM_geraete AS G, TM_install AS I WHERE G.id = I.geraet 
        AND I.active = 1 AND G.inststat = 1 AND I.techniker = '"
.$_SESSION["user_ID"]."'";
$qry mysql_query($sql) or die(mysql_error());
while(
$now mysql_fetch_assoc($qry))
{
  
?><pre><?
  print_r
($now);
  
?></pre><?
}
Das Feld active hab ich nachträglich eingeführt als ich an dieser Problemlösung gearbeitet habe.

Meine Frage: Ist diese Lösung richtig? Und kann man die vereinfachen?

Bin für jede Antwort dankbar!
cycap ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 29.08.2007, 16:57  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
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 cycap,

ich würde das ein wenig anders lösen, so dass ich die Abfrage der Eigenschaften mit JOINs lösen kann, in deinem Fall sollte das eigentlich auch möglich sein.

Zitat:
Ich will eine Abfrage haben die mir alle nicht installierten Geräte auswählt, die dem aktuellen User zugeordnet sind und wo die Termine nicht abgesagt sind. Dazu brauche ich immer den aktuellsten Installationstermin vorschlag (TM_install).

Code:
SELECT TM_geraete.* FROM TM_geraete
INNER JOIN TM_install ON TM_geraete.id = TM_install.geraet
INNER JOIN phpr_termine ON TM_install.tid = phpr_termine.ID
WHERE 
   TM_geraete.inststat = 1 
   AND 
   TM_install.techniker = $_SESSION['user_ID']
Der Code wird zwar nicht komplett deinen Anwendungsfall abdecken, aber dir sicher einen Gedanken-Anstoß geben.
__________________
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
Alt 30.08.2007, 09:51  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Hey dr.e.,

danke, dann werd ich mir wohl mal den Kopf zermartern. Würde bei meiner Lösung denn das rauskommen was ich mir vorstelle?

Gruß
CyCap
cycap ist offline   Mit Zitat antworten
Alt 30.08.2007, 13:38  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
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 cycap,

Zitat:
Würde bei meiner Lösung denn das rauskommen was ich mir vorstelle?
An sich - soweit ich das theoretisch abschätzen kann - müsste das möglich sein. Hast du die Absicht später noch weitere Zuordnungen zu speichern, kommst du mit dem Design an die Grenzen. Hier rate ich dir Beziehungs-Tabellen zu benutzen um Eigenschaften abzubilden. Das bedeutet: wenn du eine Person, einen Termin, ein Gerät, einen Lagerplatz, ... dann lege für jedes Objekt eine eigene Tabelle an und speichere die Zuordungen in FK-Tabellen. Letztere speichern einfach nur einen Key der einen und der anderen Tabelle, die sie verknüpfen plus einen PrimaryKEY für die Tabelle selbst. So kannst du Eigenschaften ganz einfach über JOINs abfragen. Möchtest du beispielsweise das Gerät, das von einer Person an einem bestimmten Termin ausgeliehen ist, musst du einfach von der Person, über die Termin-Tabelle zur Geräte-Tabelle JOINen und erhälst dann das gewünschte Ergebnis. Hier auch jeweils die Beziehungstabellen einschließen, sonst geht das schief.

Hört sich zunächst etwas wirr und kommpliziert an, ist aber verdammt flexibel, da du neue Objekte in deine Applikation mit Leichtigkeit einbauen und Beziehungen zu bereits vorhandenen Objekten aufbauen kannst, ohne alles ändern zu müssen.
__________________
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 von einer Abfrage Datenbanken 5 27.01.2011 23:31
Bedingungen für if - Abfrage richtig formulieren. horstenpeter PHP Tipps 2006 11 03.07.2006 18:43
mysql abfrage mqs PHP Tipps 2006 4 09.04.2006 17:57
Abfrage mehrerer Tabellen per PHP (Code vereinfachen) PHP Tipps 2007 4 18.12.2005 12:34
abfrage begrenzen Cyrus Datenbanken 4 26.10.2005 11:29
mysql abfrage über 4 Tabelle - bis 3 geht, bei der 4. habert Datenbanken 2 08.09.2005 11:59
$result leer obwohl abfrage richtig sein müsste Webunni.de Datenbanken 5 11.04.2005 18:44
[Erledigt] IF() abfrage in variable packen PHP Tipps 2005 14 01.04.2005 17:23
Abfrage von Char-Feldern Datenbanken 9 04.02.2005 14:06
[Erledigt] Mysql Abfrage Problem! PHP-Fortgeschrittene 5 27.11.2004 10:22
Abfrage zweier Tabellen funzt net richtig Datenbanken 1 17.09.2004 12:53
Abfrage funktioniert zwar, aber nicht korrekt Datenbanken 2 16.08.2004 09:10
Abfrage aus DB noch mal ausgeben und Abfrage aus mehrern Tab PHP Tipps 2004 4 12.07.2004 15:00
[Erledigt] Fehlerhafte Abfrage ? Datenbanken 15 24.06.2004 17:10
[Erledigt] Variable per GET übergeben und DB Abfrage nutzen PHP Tipps 2004 4 01.06.2004 15:17

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
zuordungen in tabellen lösung, richtig vereinfachen

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

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.