php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 25-09-2007, 20:53
Crake
 Registrierter Benutzer
Links : Onlinestatus : Crake ist offline
Registriert seit: Jun 2003
Beiträge: 150
Crake ist zur Zeit noch ein unbeschriebenes Blatt
Standard [MySQL 4.1] Subtraktion von Resultaten?

Das Problem ist folgendes: Es existieren 3 Menüs, denen Artikel zugeordnet werden. Jetzt sollen sämtliche Artikel aus der Datenbank gelesen werden, die nirgends zugeordnet wurden.

Also dachte ich mir, ich lese einfach sämtliche Artikel aus der Datenbank und substrahiere vom Resultat die entsprechend zugeordneten Artikel gemäß dem Schema:
Code:
SELECT article_id FROM Artikel - SELECT article_id FROM MENU_1 - SELECT article_id FROM MENU_2...
Daraufhin habe ich das MySQL-Referenzhandbuch durchwühlt, konnte aber nirgends eine entsprechende Möglichkeit entdecken. Wie lässt sich dies mittels MySQL realisieren?
__________________
Gesellschaftsforum.net - Projekt zur Wiederbelebung der Diskussionskultur im Internet
1st News - Das Newsletterscript für den professionellen Einsatz
Mit Zitat antworten
  #2 (permalink)  
Alt 25-09-2007, 20:57
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard Re: [MySQL 4.1] Subtraktion von Resultaten?

SELECT * FROM tabelle1 a LEFT JOIN tabelle2 b USING(id) WHERE b.id IS NULL;
SELECT * FROM tabelle1 a WHERE (SELECT COUNT(*) FROM tabelle2 b WHERE b.id = a.id) = 0;
(wobei der JOIN wahrscheinlich schneller ist)

aber... wieso legst du 3 Tabellen für ähnliche Daten an? Wäre es nicht besser alle 3 "Menüs" in einer Tabelle zu vereinen?!
Mit Zitat antworten
  #3 (permalink)  
Alt 25-09-2007, 21:16
Crake
 Registrierter Benutzer
Links : Onlinestatus : Crake ist offline
Registriert seit: Jun 2003
Beiträge: 150
Crake ist zur Zeit noch ein unbeschriebenes Blatt
Standard Re: Re: [MySQL 4.1] Subtraktion von Resultaten?

Danke erstmal, scheint insofern zu funktionieren.

Zitat:
Original geschrieben von ghostgambler
aber... wieso legst du 3 Tabellen für ähnliche Daten an? Wäre es nicht besser alle 3 "Menüs" in einer Tabelle zu vereinen?!
Aufgrund der unterschiedlichen Funktionsweisen sowie den verzweigten Abhängigkeiten.

Menü 1 funktioniert gemäß Parent-Modell, Menü 2 wiederum gemäß Modell Nested Set. Zudem werden die Menüpunkte des 2. Menüs zu Sets zusammengefügt, die dann wiederum Menüpunkten des 1. Menüs zugeordnet werden. Zudem ist es erforderlich, dass ich mittels einer einzelnen Variable einen Menüpunkt des 1. Menüs und einen Menüpunkt des 2. Menüs referenzieren kann (einfache Kreuzung zur Referenzierung mittels separaten Keys). Menü 3 hingegen ist lediglich eindimensional.

Aufgrund dieser Komplexität erschien mir die Aufteilung in 3 Tabellen sinnvoller.
__________________
Gesellschaftsforum.net - Projekt zur Wiederbelebung der Diskussionskultur im Internet
1st News - Das Newsletterscript für den professionellen Einsatz
Mit Zitat antworten
  #4 (permalink)  
Alt 25-09-2007, 21:30
tontechniker
 PHP Senior
Links : Onlinestatus : tontechniker ist offline
Registriert seit: Jul 2005
Beiträge: 1.972
tontechniker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Du könntest prinzipiell einfach alle Menüs über Nested Sets realisieren wenn du sowieso schon eine Tabelle damit hast.
__________________
Die Regeln | rtfm | register_globals | strings | SQL-Injections | []
Mit Zitat antworten
  #5 (permalink)  
Alt 03-10-2007, 21:18
Crake
 Registrierter Benutzer
Links : Onlinestatus : Crake ist offline
Registriert seit: Jun 2003
Beiträge: 150
Crake ist zur Zeit noch ein unbeschriebenes Blatt
Standard

So, ein kleines Problem bezüglich dieser Problematik hat sich dann doch noch ergeben:

Ich kreuze die Tabellen zweier Menüs und speichere das Ergebnis in einer separaten Tabelle ab:
Code:
INSERT INTO `content_assignment` (menu_top_id, menu_side_entry_id) SELECT b.menu_top_id, a.menu_side_entry_id FROM `menu_side` a LEFT JOIN `menu_top` b ON a.menu_side_setid = b.menu_side_setid
Insofern auch kein großartiges Problem. Jetzt möchte ich dieser separaten Tabelle jedoch lediglich Einträge hinzufügen, die in dieser Kombination aus den beiden Primärschlüsseln der Menütabellen noch nicht enthalten sind:

Code:
SELECT b.menu_top_id, a.menu_side_entry_id FROM `menu_side` a JOIN `menu_top` b ON a.menu_side_setid = b.menu_side_setid LEFT JOIN `content_assignment` c ON b.menu_top_id = c.menu_top_id WHERE b.menu_side_entry_id = c.menu_side_entry_id AND c.content_id IS NULL
Das Problem ist, dass durch die WHERE-Klausel der letzte LEFT JOIN in einen einfachen JOIN uminterpretiert wird, weshalb mir eben jene Resultate, welche nicht in der letzten Tabelle enthalten sind innerhalb der Abfrage verloren gehen.

Kurz zu Erklärung:
Code:
SELECT b.menu_top_id, a.menu_side_entry_id FROM `menu_side` a JOIN `menu_top` b ON a.menu_side_setid = b.menu_side_setid
Liefert alle Einträge, welche in `content_assignment`enthalten sein sollten.

[code]
Code:
SELECT b.menu_top_id, a.menu_side_entry_id FROM `menu_side` a JOIN `menu_top` b ON a.menu_side_setid = b.menu_side_setid LEFT JOIN `content_assignment` c ON b.menu_top_id = c.menu_top_id WHERE b.menu_side_entry_id = c.menu_side_entry_id
Liefert leider nur die Einträge, welche enthalten sind.

Edit: Hat sich erledigt. Der Versuch 2 Bedingungen innerhalb der ON-Klausel zu platzieren war erstaunlicherweise von Erfolg gekrönt.
__________________
Gesellschaftsforum.net - Projekt zur Wiederbelebung der Diskussionskultur im Internet
1st News - Das Newsletterscript für den professionellen Einsatz

Geändert von Crake (04-10-2007 um 01:26 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 03-10-2007, 23:02
BugBite
 Member
Links : Onlinestatus : BugBite ist offline
Registriert seit: May 2006
Beiträge: 299
BugBite ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ganz spontan wär mir da folgendes eingefallen

SELECT .... MINUS SELECT ....
Mit Zitat antworten
  #7 (permalink)  
Alt 03-10-2007, 23:16
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von BugBite
ganz spontan wär mir da folgendes eingefallen

SELECT .... MINUS SELECT ....
Bitte?
Mit Zitat antworten
  #8 (permalink)  
Alt 03-10-2007, 23:21
BugBite
 Member
Links : Onlinestatus : BugBite ist offline
Registriert seit: May 2006
Beiträge: 299
BugBite ist zur Zeit noch ein unbeschriebenes Blatt
Standard

vielleicht verwechsel ich da was mit oracle sql aber ich dachte das geht by mysql auch

SELECT * FROM mitarbeiter MINUS
SELECT * FROM mitarbeiter WHERE age > 18

resultat wäre dann alle mitarbeiter unter 18
Mit Zitat antworten
  #9 (permalink)  
Alt 04-10-2007, 09:43
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich glaube du verwechselst das mit Oracle.
Zumindest kannte ich das bisher nicht, sehe es auch zum ersten Mal in meinem Leben, und konnte auch im Manual gestern kurz nichts finden.
Mit Zitat antworten
  #10 (permalink)  
Alt 04-10-2007, 16:39
BugBite
 Member
Links : Onlinestatus : BugBite ist offline
Registriert seit: May 2006
Beiträge: 299
BugBite ist zur Zeit noch ein unbeschriebenes Blatt
Standard

oh ja da hast natürlich recht =/

der link hier zeigt wie man ein minus in mysql machen kann

edit: der link
http://www.bitbybit.dk/carsten/blog/?p=71
Mit Zitat antworten
Antwort

Lesezeichen


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

Themen-Optionen
Thema bewerten
Thema bewerten:

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 an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 10:54 Uhr.