SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Handbuch der Java-Programmierung

Handbuch der Java-Programmierung zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)
Hilfe Community Kalender Heutige Beiträge Suchen

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 04.08.2013, 20:55:28
Drrrrrr Drrrrrr ist offline
Anfänger
 
Registriert seit: Aug 2013
Alter: 54
Beiträge: 5
Komplexe Abfrage mit drei Tabellen

Hallo, ich versuche seit einer ganzen Weile eine Abfrage in meiner Datenbank zu erstellen. Ich habe folgende Tabellen:

Tabelle A:
ID|name (string) | ...

Tabelle B: Jointabelle mit zwei Schlüsseln
a_id|c_id

Tabelle C:
ID|active (boolean)| ...

Zeilen aus A können mehrern Zeilen in C zugeordnet sein. Es gibt maximal ein "true" bezogen auf solche Einträge in C, die zu einem Eintrag in A gehören.
----------------------------------------------------------------------------------------
Die Abfrage soll mir alle Einträge aus A liefern, die bei der Spalte "active" in Tabelle C entweder

"NULL" haben (noch keinen Eintrag in C)

ODER (wenn Einträge in C)

"false" haben, aber nur WENN

kein einziges "true" für Einträge in C auftritt, die zu einem Eintrag in A gehören
----------------------------------------------------------------------------------------
Wie sieht eine solche Abfrage aus?
Ich habe bisher versucht mit zwei LEFT OUTER JOINS zu arbeiten um eine Große Tabelle zu erzeugen. Dann habe ich über WHERE versucht die Einträge in C mit einem "true" in der Spalte "active" herauszufiltern. Dazu habe ich mit der COUNT Funktion experimentiert.

Letztlich ist es nun so, dass ich nur NULL-Einträge bekomme und Einträge, die sowohl "true" als auch "false" für Einträge die zu A gehören, haben. Die notwendige Bedingung kann ich nicht erzeugen...
Mit Zitat antworten
  #2  
Alt 05.08.2013, 17:02:23
Benutzerbild von vt1816
vt1816 vt1816 ist offline
Administrator
 
Registriert seit: Jul 2004
Beiträge: 3.707
AW: Komplexe Abfrage mit drei Tabellen

Hallo und willkommen hier im Forum.


Kannst Du uns noch zu jeder Tabelle mal 5-7 aussagekräftige Beispieldatensätze zeigen.
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #3  
Alt 08.08.2013, 18:41:56
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: Komplexe Abfrage mit drei Tabellen

Zitat:
Zitat von vt1816 Beitrag anzeigen
Kannst Du uns noch zu jeder Tabelle mal 5-7 aussagekräftige Beispieldatensätze zeigen.
Du meinst das sicher so:
Zitat:
Kannst Du uns noch zu jeder Tabelle das CREATE TABLE sowie 5-7 aussagekräftige Beispieldatensätze zeigen.
Mit Zitat antworten
  #4  
Alt 09.08.2013, 16:45:24
Drrrrrr Drrrrrr ist offline
Anfänger
 
Registriert seit: Aug 2013
Alter: 54
Beiträge: 5
AW: Komplexe Abfrage mit drei Tabellen

Das CREATE bekomme ich nicht ganz zusammen, aber ich kann es etwas bildlicher machen.
Es geht um ein browserbasiertes Spiel.

Die Tabelle A enthält Einheiten, die Tabelle C enthält Missionen die eine Einheit gerade durchführt oder bereits durchgeführt hat. Der Status der Mission wird über das Attribut "active" unterscheiden. Die Tabelle B hat nur die Funktion Missionen und Helden zu verbinden.

Ich will jede Einheit bekommen, die aktuell keine Mission hat (d.h. keinen Eintrag mit active=true) und jede Einheit, die noch keine Missionen durchgeführt hat (Eintrag mit active=NULL). Ich hatte es mit folgender Anfrage versucht:

Code:
SELECT * FROM `entities` 
LEFT OUTER JOIN entities_missions ON entities_missions.entity_id = entities.id 
LEFT OUTER JOIN missions ON entities_missions.mission_id = missions.id 
WHERE (
 (select COUNT(missions.active) from (entities)
 LEFT OUTER JOIN entities_missions ON (entities_missions.entity_id = entities.id)
 LEFT OUTER JOIN missions ON (entities_missions.mission_id = missions.id)
 WHERE (missions.active = true) ) = 0
 ) 
 OR missions.active is null
Leider funktioniert die Anweisung im ersten Teil der äußeren Bedinungen nicht so wie gewünscht (count...), da Einheiten angezeigt werden, die aktive und inaktive Missionen haben.
Mit Zitat antworten
  #5  
Alt 09.08.2013, 19:43:40
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: Komplexe Abfrage mit drei Tabellen

Zitat:
Zitat von Drrrrrr Beitrag anzeigen
Das CREATE bekomme ich nicht ganz zusammen, aber ich kann es etwas bildlicher machen.
Nein.
Code:
SHOW CREATE TABLE tabellenname;
Zitat:
Es geht um ein browserbasiertes Spiel.
Is mir Rille. Ich will wissen, mit welchen Bedingungen die Tabelle erstellt wurde, und ich will wissen, welche korrekten Datensätze dort eingetragen werden können.

Wenn Dir das zuviel ist, dann such Dir ein anderes Hobby.
Mit Zitat antworten
  #6  
Alt 10.08.2013, 09:16:12
Drrrrrr Drrrrrr ist offline
Anfänger
 
Registriert seit: Aug 2013
Alter: 54
Beiträge: 5
AW: Komplexe Abfrage mit drei Tabellen

Die einzige Besonderheit an den Tabellen ist, dass die Jointabelle ohne ID erstellt ist (braucht sie auch nicht).
Beispieldatensatz aus der verschränkten Tabelle sieht etwa so aus


ID|name|active
1|Einheit1|0
2|Einheit2|0
3|Einheit1|1
4|Einheit3|1
5|Einheit2|0
6|Einheit4|NULL

Ergebnis sollte so aussehen.
2|Einheit2|0
6|Einheit4|NULL

Begründung: Einheit1 hat einen true-Wert bei active. Einheit3 hat ebenfalls einen true-Wert bei active, allerdings ohne einen anderen zu haben, der false hat.
Wenn ich weiß wie ich dieses ergebnis erreichen kann, kann ich den Rest schon selbst erzeugen...

Geändert von Drrrrrr (10.08.2013 um 09:32:47 Uhr)
Mit Zitat antworten
  #7  
Alt 10.08.2013, 11:23:08
Ckaos Ckaos ist offline
Member
 
Registriert seit: Nov 2007
Beiträge: 843
AW: Komplexe Abfrage mit drei Tabellen

Hi,

Zitat:
kann ich den Rest schon selbst erzeugen
Nein wirst du nicht denn wenn du uns nicht mal mit
Zitat:
SHOW CREATE TABLE tabellenname;
+ Bsp. Datensätze liefern kannst wirst du immer wieder hier aufschlagen
weil du nicht mal die Grundlagen beherrscht!

MfG

CKaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
Mit Zitat antworten
  #8  
Alt 10.08.2013, 16:08:03
Drrrrrr Drrrrrr ist offline
Anfänger
 
Registriert seit: Aug 2013
Alter: 54
Beiträge: 5
AW: Komplexe Abfrage mit drei Tabellen

Ich nutze zum Erstellen meiner Tabellen das Ruby on Rails Framework (hobbymäßig seit 5 Jahren), das mir die unproduktive, nicht wertschöpfende Arbeit mit SQL Anweisungen weitgehend abnimmt. Daher kann ich ohne größeren Aufwand nicht die genaue Syntax der Tabellenerstellung wiedergeben, zumal sie für die Problemstellung weitgehend irrelevant ist.
Ich hier dennoch die Formulierung in Rails, die alle wesentlichen Informationen enthält aufgeführt. Aus der Syntax kann man ablesen, wie die Tabellen aufgebaut sind und welche zusätzlichen Parameter verwendet wurden...Beispieldaten sind auch angefügt.

Zitat:
create_table "entities", :force => true do |t|
t.string "name"
end

create_table "entities_missions", :id => false, :force => true do |t|
t.integer "mission_id"
t.integer "entity_id"
end

create_table "missions", :force => true do |t|
t.string "name"
t.boolean "active"
end
Beispieldatensätze sehen nun so aus:

Entities Tabelle:
Zitat:
ID|name
1|Einheit1
2|Einheit2
3|Einheit3
4|Einheit4
5|Einheit5

EntitiesMissions Tabelle:
Zitat:
entity_id|mission_id
1|1
1|2
2|3
2|4
3|5
4|6
Missions Tabelle:
Zitat:
ID|name|active
1|Mission1|0
2|Mission2|1
3|Mission2|0
4|Mission4|0
5|Mission5|0
6|Mission6|1
Wie gesagt suche ich die Einheiten, die entweder keine aktive Mission haben ODER noch überhaupt keine Mission haben
Mit Zitat antworten
  #9  
Alt 10.08.2013, 20:23:25
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: Komplexe Abfrage mit drei Tabellen

Zitat:
Zitat von Drrrrrr Beitrag anzeigen
Wie gesagt suche ich die Einheiten, die entweder keine aktive Mission haben ODER noch überhaupt keine Mission haben
Viel Spaß noch beim Suchen. Fehlendes Wissen kannste Dir da:
http://dev.mysql.com/doc/refman/5.1/en/
und da:
http://www.php.net/manual/en/
anlesen. Offenbar willst Du den Fehler selber finden, da Du immer noch nicht die angeforderten Informationen rausrückst.
Mit Zitat antworten
  #10  
Alt 11.08.2013, 12:21:59
Drrrrrr Drrrrrr ist offline
Anfänger
 
Registriert seit: Aug 2013
Alter: 54
Beiträge: 5
AW: Komplexe Abfrage mit drei Tabellen

Habe das Problem selbst lösen können.

Es ist möglich das gewünschte Ergebnis zu erhalten, wenn man die Tabellen über LEFT OUTER JOINS verschränkt (Alle Einträge inkl der mit 'missions.active = NULL') und als Bedinung ein NOT IN verwendet. Das NOT IN bezieht sich dann auf die IDs derjenigen Einträge in der verschränkten Tabelle, die ein 'missions.active = true' haben.
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Abfrage über Tabellen frank1973 MySQLi/PDO/(MySQL) 5 06.01.2010 07:03:23
Abfrage über 3 gleiche Tabellen Michael_Roelle MySQLi/PDO/(MySQL) 4 28.02.2008 07:42:03
Abfrage nach letztem Datum über mehrere Tabellen delalE MySQLi/PDO/(MySQL) 27 13.06.2007 18:00:40
Abfrage aus zwei Tabellen Skyman MySQLi/PDO/(MySQL) 5 23.05.2006 17:39:53
Abfrage über zwei Tabellen MrLongbaugh MySQLi/PDO/(MySQL) 6 30.08.2005 17:14:56


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:23:17 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt