php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 29.05.2006, 12:07  
Erfahrener Benutzer
 
Registriert seit: 16.02.2006
Beiträge: 303
tinchen
Standard Probleme mit einer query

Guten Morgen,

ich habe ein Problem die query richtig zu "formulieren". Vielleicht könnt ihr mit den entscheidenen Tipp geben.
(Ich weiß das mit \n in der query wird hier ungerne gesehen (macht ja auch keinen Sinn) - zu Info: das ist nicht mein Werk )


Zunächst gibt es zwei Tabellen:
jos_modules
id | title | ...

jos_modules_menu
(sozusagen die Verbindung zwischen Modulen und der Menüid)
moduleid | menuid

Die Itemid ist die globale Variable für den Seitenaufruf.
$my->gid ein Objekt, dass das Rechtemanagemt steuert.

PHP-Code:
$query "SELECT id, title, module, position, content, showtitle, params"
    
"\n FROM jos_modules AS m"
    
"\n INNER JOIN jos_modules_menu AS mm ON mm.moduleid = m.id"
    
"\n WHERE m.published = 1"
    
"\n AND m.access <= '"$my->gid ."'"
    
"\n AND m.client_id != 1"
    
"\n AND ( mm.menuid = '"$Itemid ."' OR mm.menuid = 0 )"
    
"\n ORDER BY ordering"
Mein Problem ist nur, dass ich diese Abfrage im oben angesprochenen Sinne gerne erweitert hätte.
Dazu habe ich eine dritte Tabelle angelegt:
(ggf. reicht es auch aus die Tabelle jos_modules_menu um den Punkt invert zu ergänzen?)

jos_modules_menu_invert
moduleid | menuid | invert
3 | 1 | 1
3 | 2 | 1
1 | 1 | 0 etc.

Nun soll die Abfrage so ergänzt werden, dass wenn immer invert gleich 1 gesetzt ist, alle Ergebnisse bis auf die zugeorneten modulids bzw.
menuids ausgegeben werden, die mit invert 1 versehen sind.
Ist sie Null gesetzt verändert sich praktisch gar nichts und die Abfrage gibt aus wie jetzt.

Ich habe nun 5 Stunden daran herumgebastelt - ohne Erfolg. Ich habe von Arrays bis zu vorgeschalteten querys alles probiert,
es funktioniert nicht so wie gewünscht. Wenn ihr mehr Infos braucht oder meine Beschreibung dürftig ist,
sagt einfach bescheid, ich habe selbst so meine Schwierigkeiten das zu verstehen,
was ich da machen möchte.
Vermutlich liegt da der Hase im Pfeffer begraben.

Grüße
Tine
tinchen ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 29.05.2006, 12:26  
Gast
 
Beiträge: n/a
Standard

Den Löäsungsansatz habe ich nicht verstanden.
Du hast eine funktionierende Abfrage, die Du um eine "Umkehrung" erweitern willst. Also positiv: "wähle alle DAtensätze aus, die Bedingung abc erfüllen" und willst jetzt das Negativ da "wähle alle Datensätze aus, die Bedingung abc NICHT erfüllen"?
Wenn ja, dann schreib das doch einfach so in die Abfrage rein. Wozu die Extratabelle?
  Mit Zitat antworten
Alt 29.05.2006, 12:55  
Erfahrener Benutzer
 
Registriert seit: 16.02.2006
Beiträge: 303
tinchen
Standard

Das Problem ist, dass ich es zunächst innerhalb der Tabelle
jos_modules_menu probiert habe. Also so:
moduleid | menuid | invert
2 | 1 | 1
2 | 2 | 0 etc.

Die Abfrage habe ich dann erweitert.
Das funktioniert aber nicht.
Mein Problem ist, dass ich beides möchte. Also sowohl als auch. Wenn invert=1 dann invertieren und diese nicht ausgeben, aber alle anderen die nicht invert = 1 gesetzt sind, wenn invert = 0 dann so wie gehabt.

Gruß
Tine
tinchen ist offline   Mit Zitat antworten
Alt 29.05.2006, 13:09  
Gast
 
Beiträge: n/a
Standard

Wenn ich alle Datensätze haben will, bei denen im Feld eins der Wert abc steht, schreibe ich
SELECT eins,zwei,drei FROM tabelle WHERE eins='abc'

Wenn ich alle Datensätze haben will, bei denen nicht abc im Feld eins steht, kann ich
SELECT eins,zwei,drei FROM tabelle WHERE NOT (eins='abc')
schreiben - einfache Verneinung.
Ist das nicht ungefähr das, was Du haben willst?
Der Sinn der Extratabelle leuchtet mir einfach nicht ein - vielleicht habe ich auch nur das Problem nicht verstanden.
  Mit Zitat antworten
Alt 29.05.2006, 13:54  
Erfahrener Benutzer
 
Registriert seit: 16.02.2006
Beiträge: 303
tinchen
Standard

Ich hatte ja bereits geschrieben, dass es nicht ganz einfach ist - so meine Vermutung.
Die dritte Tabelle hatte ich nur zusätzlich anglegt um ggf. eine zweiten join in eine andere Tabelle zu machen.
Dabei wusste ich nicht genau, ob man zwei Joins in ein und die selbe Tabelle fahren kann?

jos_menu:
Die Startseite besitzt die id 1, was gleichzeitig die zugehörige Itemid ist.
Das Impressum besitzt die id 5, was gleichzeitig die zugehörige Itemid ist.

jos_modules: Das Modul Beispielmodul besitzt die modulid = 45

jos_modules_menu:
Ergbit also die Zuordnung
moduleid = 45 | menuid = 1
moduleid = 45 | menuid = 5
(mehr passiert nicht: Also keine weiteren Einträge!)

Wenn ich das Ganze nun erweitere kann man zusätzlich auswählen, dass in diesem Fall invertiert werden soll.
Ergibt in der Tabelle jos_modules_menu den zusätzlichen Eintrag.
moduleid = 45 | menuid = 1 | invert = 1
moduleid = 45 | menuid = 5 | invert = 1

Nun zu Datenabfrage: (ich schreibe einfach mal in hinein)
PHP-Code:
<?php
$query 
"SELECT id, title, module, position, content, showtitle, params"
    
"\n FROM jos_modules AS m"
    
"\n INNER JOIN jos_modules_menu AS mm ON mm.moduleid  (45) = m.id (45)"
    
"\n WHERE m.published = 1" 
    
//. "\n AND m.access <= '". $my->gid ."'" //unwichtig in diesem Zusammenhang
    //. "\n AND m.client_id != 1"    //unwichtig in diesem Zusammenhang
    
"\n AND ( mm.menuid (1 bzw. 5) = '"$Itemid ."'  (1 bzw. 5)
     OR mm.menuid = 0 (alle anderen Module verschieden von 45 , die 0 gesetzt sind!) )"
    
"\n ORDER BY ordering"
?>
So, wie bringe ich da nun mein invert unter, wenn ich bei Auswahl invert also invert=1,
auf diesen Seiten (1,5) keine Anzeige des Modul 45 möchte, auf allen Seiten aber das Modul angezeit werden soll
und gleichzeitig alle andere Module (verschieden von 45), die 0 gesetzt sind, weil Sie auf allen Seiten,
also beim Aufruf von 1 bzw. 5 angezeit werden sollen?
Das geht nicht so einfach mit WHERE NOT.
Wenn es überhaupt möglich ist.

Gruß
Tine
tinchen ist offline   Mit Zitat antworten
Alt 29.05.2006, 13:57  
Gast
 
Beiträge: n/a
Standard

Gibt es eine Tabelle, in der alle Module (vor allem die ids) stehen?
  Mit Zitat antworten
Alt 29.05.2006, 13:59  
Erfahrener Benutzer
 
Registriert seit: 16.02.2006
Beiträge: 303
tinchen
Standard

Klar: jos_modules
id | title | content | position | ...
tinchen ist offline   Mit Zitat antworten
Alt 29.05.2006, 14:03  
Gast
 
Beiträge: n/a
Standard

Dann kannst Du das mit einem LEFT JOIN lösen.
Weist Du wie JOIN funktioniert und was die Besonderheiten von LEFT JOIN und RIGHT JOIN sind?
ggf hier nachlesen: http://www.w3schools.com/sql/sql_join.asp
  Mit Zitat antworten
Alt 29.05.2006, 14:06  
Erfahrener Benutzer
 
Registriert seit: 16.02.2006
Beiträge: 303
tinchen
Standard

Von welcher Tabelle sollten dann alle Datensätze ausgegeben werden, sorry, aber mir fällt das relativ schwer das zu durchdenken?
tinchen ist offline   Mit Zitat antworten
Alt 29.05.2006, 14:08  
Gast
 
Beiträge: n/a
Standard

Erstmal geht es nur darum, ob Du JOIN verstanden hast.
  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
Variablen in Query automatisch escapen Maho88 PHP Tipps 2007 10 31.07.2007 08:42
SQL Query Builder gesucht MaMo-Net Beitragsarchiv 10 08.05.2007 21:42
find den Fehler im Query nicht !? madSoul Datenbanken 2 09.11.2006 12:19
Probleme bei Speicherung von serialize() Strings Manni2k PHP Tipps 2006 13 15.10.2006 15:06
Probleme mit mbstring extension unter Debian HStev Server, Hosting und Workstations 3 30.08.2006 20:55
PHP/MySQL: Query wird nicht ausgeführt Zergling-new Tutorials 5 09.05.2006 23:16
[Erledigt] count(..) in derselben Query noch &quot;abfragen&quot; Datenbanken 4 04.01.2006 17:33
query r�cksetzen? Promaetheus PHP Tipps 2007 15 01.12.2005 13:53
[Erledigt] Hartnäckiges SQL Query... Datenbanken 1 05.10.2005 18:23
Query, was aus einer Tabelle mehrere Summen rausholt Datenbanken 3 14.09.2005 16:45
mysql_query meldet Fehler, MySQL Query Browser nicht Datenbanken 3 04.05.2005 17:15
Zwei Rechner ins Netz - Router - Hub - Probleme... imported_Ben Off-Topic Diskussionen 37 13.01.2005 21:36
[Erledigt] Technische Probleme mit Sessions PHP-Fortgeschrittene 4 18.11.2004 14:45
select query durch if anweisungen splitten Datenbanken 6 06.09.2004 13:46
[Erledigt] Query läuft nicht Datenbanken 6 13.08.2004 21:13

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysql select \sowohl als auch\ join, jos_modules_menu modulid, php mit derselben query in verschiedene tabellen schreiben

Alle Zeitangaben in WEZ +2. Es ist jetzt 23:42 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.