Hallo,
ich hab ein Problem. Ich hab auf meiner "Suchseite" etwas dynamisches, dabei handelt es sich um Projekte. Es ist so geregelt, dass ich nach unterschiedlich vielen Projekten Suchen kann. Diese Projekte sind in einer MySQL Datenbank und ich möchte, bei mehreren Projekten, eine "Oder" abfrage machen, beispiel: "SELECT * FROM projekte WHERE titel='projekt1' Or titel='projekt2' OR titel='projekt99'"
So wenn aber in der Suche nur nach 2 Projekten gesucht wird, soll sich auch das SQL Statement anpassen auf die beiden Projekttitel!
Ist so was möglich oder sind solche Z SQL Methoden nur statisch ?
mfg mitch
dynamische sql methoden via python scripts ?
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi mitch!mitch hat geschrieben:"SELECT * FROM projekte WHERE titel='projekt1' Or titel='projekt2' OR titel='projekt99'"
Verwende stattdessen den IN-Operator.
http://dev.mysql.com/doc/refman/5.1/en/ ... ators.html
Code: Alles auswählen
SELECT * FROM projekte WHERE titel IN ('projekt1', 'projekt2', 'projekt99')
Die Hilfe dazu findest du im ZMI in der Hilfe unter "Zope Help" > "DTML Reference" > "sqlvar". Und auch, wenn du in der Zope-Hilfe nach "SQL" suchst.
mfg
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi!
Ich glaube, so sollte es funktionieren:
mfg
Gerold

Ich glaube, so sollte es funktionieren:
Code: Alles auswählen
SELECT
*
FROM
projekte
<dtml-sqlgroup where>
<dtml-sqltest titel type=string multiple optional>
</dtml-sqlgroup>
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Hi gerold,
danke für deine Antworte, ich habe es jetzt erstmal so gelöst:
Hier der code der SQL Methode:
Bei meinem Vorgang führe ich sehr oft eine Abfrage auf die Datenbank los, kostet mich das sehr viel Ressourcen?
mfg mitch
danke für deine Antworte, ich habe es jetzt erstmal so gelöst:
Code: Alles auswählen
#ich hole mir die anzahl der Projekte, nach denen gesucht wird aus dem Request
projekteAnzahl=context.REQUEST.get('projekteAnzahl')
projekteAnzahl=int(projekteAnzahl)
#request mal verkürzen
request=context.REQUEST
#eine liste machen für die mitarbeiter die in den gesuchten projekten mitarbeiten
ret_list = []
zaehler=0
projekt='projekt'
if projekteAnzahl>=1:
while zaehler < projekteAnzahl:
zaehler=zaehler+1
zaehlerString=str(zaehler)
#da die nach unterschiedlich vielen projekten gesucht werden kann, habe ich auch die Namen der Dropdowns dynamisch erstellt bsp.:projekt1,projekt2 etc und als Value hab ich den Index aus der MySQL DB vergeben den ich dann abrufe
projektH=projekt+zaehlerString
projektId=request.get(projektH)
#getMitarbeiterId_prid ist eine SQLmethode, somit bekomme ich aus der Kreuztabelle zw Mitarbeiter und Projekt die MitarbeiterNummer raus
mitarbeiterNummer=context.getMitarbeiterId_prid(pr_id=projektId)
flag=1
#nun gehe ich alle gefunden einträge durch
for mitarbeiterNumme in mitarbeiterNummer:
ret_list_laenge=len(ret_list)
zaehler2=0
#die while schleife ist dafür da, dass fals nach mehreren Projekten gesucht wird, in dem aber ein und der gleiche Mitarbeiter ist, dieser nur einmal eingetragen wird in meine liste ret_list
while zaehler2<ret_list_laenge:
if mitarbeiterNumme.ma_id == ret_list[zaehler2]:
zaehler2=zaehler2+1
flag=1
break
else:
zaehler2=zaehler2+1
flag=0
if flag==0 or ret_list_laenge==0:
ret_list.append(mitarbeiterNumme.ma_id)
#wenn projekte ignoriert werden sollen, gebe ich alle mitarbeiter wieder
else:
mitarbeiter=context.getMitarbeiter()
for mitarbeite in mitarbeiter:
ret_list.append(mitarbeite.ma_id)
Code: Alles auswählen
SELECT * FROM mitarbeiter
INNER JOIN mitarbeiter_projekt
ON mitarbeiter.ma_id = mitarbeiter_projekt.ma_nr
WHERE mitarbeiter_projekt.pr_nr LIKE <dtml-sqlvar pr_id type=string>
mfg mitch