Seite 1 von 1
dynamische sql methoden via python scripts ?
Verfasst: Mittwoch 7. Februar 2007, 09:47
von mitch
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
Re: dynamische sql methoden via python scripts ?
Verfasst: Mittwoch 7. Februar 2007, 14:02
von gerold
mitch hat geschrieben:"SELECT * FROM projekte WHERE titel='projekt1' Or titel='projekt2' OR titel='projekt99'"
Hi mitch!
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')
Du kannst aber auch mit ``dtml-sqltest`` und/oder ``dtml-sqlgroup`` arbeiten.
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

Verfasst: Mittwoch 7. Februar 2007, 14:16
von gerold
Hi!
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>
mfg
Gerold

Verfasst: Donnerstag 8. Februar 2007, 13:30
von mitch
Hi gerold,
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)
Hier der code der SQL Methode:
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>
Bei meinem Vorgang führe ich sehr oft eine Abfrage auf die Datenbank los, kostet mich das sehr viel Ressourcen?
mfg mitch