Krijg geen goede SQL regel

Status
Niet open voor verdere reacties.

terroraapje

Gebruiker
Lid geworden
14 sep 2010
Berichten
87
hoi allemaal
ik heb een vraagje
ik moet een query laten lopen in asp. dat leukt allemaal wel. Maar nu de query zelf nog
ik heb 2 tabelen 1 genaamd "number" en de andere "names"
elk "number" is identiek maar "names" niet. dus 1 name kan meerde number hebben.

Nou wil ik in mijn query kunnen zoeken op beide. bijv eerst op numbers en dan op names maar hou zet ik dat in een query?

ik heb de volgende dingen zelf al maar die werken niet:

"SELECT * FROM dbo.users WHERE names = '" Input vanuit link "' AND numbers LIKE '%"input van uit tekstfield "%' ORDER BY datum DESC"
bij deze krijg ik alle velden zonder naam
Beide inputs beginnen met ""(geen waarde)

thanks
 
Weet je zeker dat die twee variabelen gezet worden? En is "numbers" een string? Want anders kun je er geen LIKE op doen.

Verder open je maar 1 tabel, dus staan "name" en "numbers" in dezelfde tabel?
 
dat is het leuke
als ik de names uit de sql haal doet hij wat ik wil
dan kan ik cijfers invoeren en hij vindt het gewoon
en ja het is 1 tabel en zoek in 2 colums.
en als ik de session laat uit schrijven krijg ik ook echt tekst terug.
het zit hem dus echt in de SQL
 
????
dit is denk niet zon een groot probleem? alleen kom ik er niet uit!
lijkt me niet dat een heel forum het niet snapt:/
 
Geef eens een groter deel van het script (het hele stuk waar de query opgebouwd wordt), een echo van het eindresultaat van het opbouwen van de query (dus niet de query in code, maar de daadwerkelijke query die verzonden wordt naar de database) en een layout van je database tabel?

Waarschijnlijk hebben we nog te weinig informatie.
 
oke sorry:)
maar zeg dat dan ook:P
Zoekveld voor projecten(Recordset1__MMColParam)
Code:
<form method="get" name="zoekformzoek">
Zoeken<input type="text" name="zoekfieldzoek" STYLE="background-color: #FFCC00;" size="8" maxlength="8"/>
<input type="submit" name="zoeksubzoek" value="Zoeken"/>
</form>

ASP(SQL Opbouw)
Code:
<%
Dim Recordset1__technadv
Recordset1__technadv = ""
If (Request.QueryString("techn_adv") <> "") Then 
  Recordset1__technadv = Request.QueryString("techn_adv")
End If
%>
<%
Dim Recordset1__MMColParam
Recordset1__MMColParam = ""
If (Request.QueryString("zoekfieldzoek") <> "") Then 
  Recordset1__MMColParam = Request.QueryString("zoekfieldzoek")
End If
%>
<%
Dim Recordset1
Dim Recordset1_numRows

Set Recordset1 = Server.CreateObject("ADODB.Recordset")
Recordset1.ActiveConnection = MM_verbinding_STRING
Recordset1.Source = "SELECT * FROM dbo.Project_info FULL JOIN dbo.KNA1_mailing_adressen ON dbo.Project_info.SOLD_to_SAP=dbo.KNA1_mailing_adressen.KUNNR WHERE projnr LIKE '" + Replace(Recordset1__MMColParam, "'", "''") + "%' OR techn_adv = '" + Replace(Recordset1__technadv,  "'", "''") + "%' ORDER BY datum DESC"
Recordset1.CursorType = 0
Recordset1.CursorLocation = 2
Recordset1.LockType = 1
Recordset1.Open()

Recordset1_numRows = 0
%>

Output
Code:
<table align="center" border="1">
  <tr>
              <td align="left" width="5%"> projnr </td>
              <td align="left" width="6%"> datum </td>
              <td align="left" width="14%"> PLTXT </td>
	<td align="left" width="14%"> Projectinhoud </td> 	 
	<td align="left" width="6%"> projectengineer </td>
              <td align="left" width="6%"> Techn_adv </td>
	<td align="left" width="10%"> name1 </td>
	<td align="left" width="10%"> ort01 </td>
	<td align="left" width="8%"> YYMM_CL_SAP </td>
  </tr>
  <% 
While ((Repeat1__numRows <> 0) AND (NOT Recordset1.EOF)) 
%>
    <tr>
      <td align="left" width="5%"><a href="detail.asp?<%= Server.HTMLEncode(MM_keepBoth) & MM_joinChar(MM_keepBoth) & "projnr=" & Recordset1.Fields.Item("projnr").Value %>"><%=(Recordset1.Fields.Item("projnr").Value)%></a> </td>

      <td align="left" width="6%"><%=(Recordset1.Fields.Item("datum").Value)%> </td>
      <td align="left" width="14%"><%=(Recordset1.Fields.Item("Projectinhoud").Value)%> </td>

      <td align="left" width="14%"><%=(Recordset1.Fields.Item("PLTXT").Value)%> </td>

      <td align="left" width="6%"><%=(Recordset1.Fields.Item("projectengineer").Value)%> </td>

     <td align="left" width="6%"><a href="zoek.asp?<%= Server.HTMLEncode(MM_keepBoth) & MM_joinChar(MM_keepBoth) & "techn_adv=" & Recordset1.Fields.Item("techn_adv").Value %>"><%=(Recordset1.Fields.Item("techn_adv").Value)%></a> </td>

      <td align="left" width="10%"><%=(Recordset1.Fields.Item("NAME1").Value)%> </td>

      <td align="left" width="8%"><%=(Recordset1.Fields.Item("ORT01").Value)%> </td>
			  
      <td align="left" width="10%"><%=(Recordset1.Fields.Item("YYMM_CL_SAP").Value)%> </td>

    </tr>
    <% 
  Repeat1__index=Repeat1__index+1
  Repeat1__numRows=Repeat1__numRows-1
  Recordset1.MoveNext()
Wend
%>
</table>
Het is in dreamweaver 8 gebouwt dus voor verdere code kan je veel troep verwachten.
nog meer nodig?
dan hoor ik het:D
 
Een beschrijving van de database velden zou handig zijn.

Maar even voor de duidelijkheid.

Code:
SELECT * FROM dbo.Project_info FULL JOIN dbo.KNA1_mailing_adressen ON dbo.Project_info.SOLD_to_SAP=dbo.KNA1_mailing_adressen.KUNNR WHERE projnr LIKE '" + Replace(Recordset1__MMColParam, "'", "''") + "%' OR techn_adv = '" + Replace(Recordset1__technadv,  "'", "''") + "%' ORDER BY datum DESC

Je ziet dat je hier een LIKE doet of een veld dat zo te zien een project nummer is en een = met een % teken erin op een ander veld? Op die manier krijg je hele rare dingen te zien... als je zoekt op project 1 krijg je alle projecten die beginnen met een 1 (1, 10, 14, 135) en alleen _adv die eindigt op een echt procent-teken...
 
ja klopt
maar zoals ik al zei aan projecten is alles goed. de gebruiker hoeft alleen de beginende nummers in tevullen om het te zoeken. Het gaat mij om het combineren van techn_adv.

in projnr staan alleen nummers in de vorm van text. dus een text veld
techn_adv is een text veld met daar in de namen van personen
voluit geschreven staat techn_adv voor technisch adviseur.


mmmm ja maar als ik die = verander in een like dan krijg ik gewoon alles terug zonder filter er over heen.
 
hoi terroraapje ,

om even op je query in post #1 terug te komen
deze query selecteert alles zonder naam als de variabelen leeg zijn. ik zou dus nog even dubbelchecken of je variabelen daadwerkelijk gevuld zijn.
(jouw eigen query)
[SQL]
SELECT *
FROM dbo.users
WHERE names = '" Input vanuit link "' AND numbers LIKE '%"input van uit tekstfield "%'
ORDER BY datum DESC
[/SQL]

als beide variabelen zijn gevuld krijg je wel een goede selectie.

Als je slechts een van de twee variabelen wilt zoeken gebruik dan OR en names/numbers ongelijk aan leeg [twee enkele quotes]

[SQL]
SELECT [kolomnamen?]
FROM dbo.users
WHERE ( names = '" Input vanuit link "' OR numbers LIKE '%"input van uit tekstfield "%')
AND names <> ''
AND numbers <> ''
ORDER BY datum DESC
[/SQL]

Wellich kun je inderdaad in plaats van LIKE ook een andere operator gebruiken. maar jij weet het beste wat je nodig hebt

ps. als je van je database houdt vervang je die asterisk(*) gewoon door kolomnamen.
 
Laatst bewerkt:
ey
bedankt maar nee.
ik heb hem ff ingevuld en zet het even hier neer
miss dat jij ergens iets ziet van mmm nee dat doe je fout?
SQL gedeelte:
Code:
<%
Dim Recordset1__MMColParam
Recordset1__MMColParam = ""
If (Request.QueryString("zoekfieldzoek") <> "") Then 
  Recordset1__MMColParam = Request.QueryString("zoekfieldzoek")
End If
%>
<%
Dim Recordset1__projeng
Recordset1__projeng = ""
If (Request.QueryString("projectengineer") <> "") Then 
  Recordset1__projeng = Request.QueryString("projectengineer")
End If
%>
<%
Dim Recordset1
Dim Recordset1_numRows

Set Recordset1 = Server.CreateObject("ADODB.Recordset")
Recordset1.ActiveConnection = MM_verbinding_STRING
Recordset1.Source = "SELECT projnr, datum, techn_adv, PLTXT, Projectinhoud, projectengineer, Sold_to_SAP, YYMM_CL_SAP, NAME1, ORT01 FROM dbo.Project_info FULL JOIN dbo.KNA1_mailing_adressen ON dbo.Project_info.SOLD_to_SAP=dbo.KNA1_mailing_adressen.KUNNR WHERE ( projectengineer = '" + Replace(Recordset1__projeng, "'", "''") +  "' OR projnr LIKE '%" + Replace(Recordset1__MMColParam, "'", "''") + "%') AND projectengineer <> '' AND projnr <> '' ORDER BY datum DESC"

de rest
Code:
<form method="get" name="zoekformzoek">
Zoeken<input type="text" name="zoekfieldzoek" STYLE="background-color: #FFCC00;" size="8" maxlength="8"/>
<input type="submit" name="zoeksubzoek" value="Zoeken"/>
</form>
</center>
<table align="center" border="1">
  <tr>
    <td align="left" width="5%"> projnr </td>
    <td align="left" width="6%"> datum </td>
    <td align="left" width="14%"> PLTXT </td>
	<td align="left" width="14%"> Projectinhoud </td> 	 
	<td align="left" width="6%"> projectengineer </td>
    <td align="left" width="6%"> Techn_adv </td>
	<td align="left" width="10%"> name1 </td>
	<td align="left" width="10%"> ort01 </td>
	<td align="left" width="8%"> YYMM_CL_SAP </td>
  </tr>
  <% 
While ((Repeat1__numRows <> 0) AND (NOT Recordset1.EOF)) 
%>
    <tr>
      <td align="left" bgcolor="ffffff" width="5%"><a href="detail.asp?<%= Server.HTMLEncode(MM_keepBoth) & MM_joinChar(MM_keepBoth) & "projnr=" & Recordset1.Fields.Item("projnr").Value %>"><%=(Recordset1.Fields.Item("projnr").Value)%></a> </td>
      <td align="left" bgcolor="ffffff" width="6%"><%=(Recordset1.Fields.Item("datum").Value)%> </td>
      <td align="left" bgcolor="ffffff" width="14%"><%=(Recordset1.Fields.Item("Projectinhoud").Value)%> </td>
      <td align="left" bgcolor="ffffff" width="14%"><%=(Recordset1.Fields.Item("PLTXT").Value)%> </td>
	  <td align="left" bgcolor="ffffff" width="6%"><a href="zoek.asp?<%= Server.HTMLEncode(MM_keepBoth) & MM_joinChar(MM_keepBoth) & "projectengineer=" & Recordset1.Fields.Item("projectengineer").Value %>"><%=(Recordset1.Fields.Item("projectengineer").Value)%> </td>
      <td align="left" bgcolor="ffffff" width="6%"><%=(Recordset1.Fields.Item("Techn_adv").Value)%> </td>
      <td align="left" bgcolor="ffffff" width="10%"><%=(Recordset1.Fields.Item("NAME1").Value)%> </td>
      <td align="left" bgcolor="ffffff" width="8%"><%=(Recordset1.Fields.Item("ORT01").Value)%> </td>
				  
	  <td align="left" bgcolor="ffffff" width="10%"><%=(Recordset1.Fields.Item("YYMM_CL_SAP").Value)%> </td>

    </tr>
    <% 
  Repeat1__index=Repeat1__index+1
  Repeat1__numRows=Repeat1__numRows-1
  Recordset1.MoveNext()
Wend
%>
</table>
 
Ik denk dat je in je oude query inner join moet gebruiken.
Ik heb nog nooit full outer join gebruikt.

[SQL]
SELECT projnr,
datum,
techn_adv,
PLTXT,
Projectinhoud,
projectengineer,
Sold_to_SAP,
YYMM_CL_SAP,
NAME1,
ORT01
FROM dbo.Project_info I
INNER JOIN dbo.KNA1_mailing_adressen M ON I.SOLD_to_SAP=M.KUNNR
WHERE projectengineer = ''
AND projnr LIKE '%%'
ORDER BY datum DESC
[/SQL]

(maak zelf je query even goed :P)

Code:
"SELECT projnr, datum, techn_adv, PLTXT, Projectinhoud, projectengineer, Sold_to_SAP, YYMM_CL_SAP, NAME1, ORT01 FROM dbo.Project_info INNER JOIN  dbo.KNA1_mailing_adressen M ON I.SOLD_to_SAP=M.KUNNR WHERE ( projectengineer = '" + Replace(Recordset1__projeng, "'", "''") +  "' AND projnr LIKE '%" + Replace(Recordset1__MMColParam, "'", "''") + "%') ORDER BY datum DESC"

Wat in je query ontbreekt, is de bijbehorende tabelnaam van elke kolom die je selecteert.

Als een van de volgende velden: "projnr, datum, techn_adv, PLTXT, Projectinhoud, projectengineer, Sold_to_SAP, YYMM_CL_SAP, NAME1, ORT01 " in beide tabellen voorkomt krijg je ook een fout.
Bovendien maakt het niet invullen van de tabelnamen bij je kolommen je programmacode minder goed leesbaar.

Wat je nog zou kunnen doen is voor elk veld wat je selecteert de referentie naar de tabel kunnen zetten.
als datum in de tabel project_info staat (in deze query alias I) verander je datum in I.datum, enzovoort.
 
Laatst bewerkt:
ik heb hem er in gezet maar nu krijg ik alles waar juist geen projectengineer is;)
dat probleem heb ik ook al heel de tijd;) en als ik OR doe in plaats van AND gebeurt er niks;)
Heerlijk zo'n ***** probleem xD

En ik gebruik full join zodat ik alle records krijg ook die maar 1 veld vol hebben:)
 
Laatst bewerkt:
heb je deze code al geprobeerd?

Code:
"SELECT projnr, datum, techn_adv, PLTXT, Projectinhoud, projectengineer, Sold_to_SAP, YYMM_CL_SAP, NAME1, ORT01 FROM dbo.Project_info INNER JOIN  dbo.KNA1_mailing_adressen M ON I.SOLD_to_SAP=M.KUNNR WHERE ( projectengineer = '" + Replace(Recordset1__projeng, "'", "''") +  "' AND projnr LIKE '%" + Replace(Recordset1__MMColParam, "'", "''") + "%') ORDER BY datum DESC"

Een full join is nutteloos, plus je belast je server met opdrachten waar je niets aan hebt.

Als je wilt zien welke projecten geen projectengineer hebben gebruik je een
LEFT OUTER JOIN
en
WHERE COALESCE(projectengineer,'') = ''
(mits je de correcte left join gebruikt)
 
Laatst bewerkt:
als je nog even de juiste tabel referenties bij elk veld zet probeer ik ff een goede query voor je in elkaar te flansen :thumb:
 
hopen dat het lukt;)

dbo.project_info.Sold_to_SAP=dbo.KNA1_mailing_adressen.KUNNR

in techn_adv en projectengineer komen de zelfde namen voor. die staan wel weer in een andere tabel maar dat is hier niet nodig.

Dus nog ff snel wat ik wil zien.
Ik wil kunnen zoeken op projnr en op projectengineer los van elkaar maar ook te gelijk.
En als ik bijv. al op projnr heb gezocht dat ik daar overheen nog kan zoeken op projectengineer.
nog meer nodig?
 
nog meer nodig?
Ja,

in welke tabellen staan al deze velden:
projnr, datum, techn_adv, PLTXT, Projectinhoud, projectengineer, Sold_to_SAP, YYMM_CL_SAP, NAME1, ORT01

project_info.Sold_to_SAP = A
KNA1_mailing_adressen = B

- staat projnr in A of in B
- staat datum in A of in B
enzovoort.
 
oke:D

projnr = a
datum = a
pltxt = a
projectinhoud = a
projectengineer = a
techn_adv = a
Sold_to_SAP = a
YYMM_CL_SAP = a
name1= b
ORT01 = b
 
sorry ik zat helemaal verkeerd te kijken.
Dit is wat je wilt.
pas even de where statements aan

[SQL]
SELECT I.projnr,
I.datum,
I.techn_adv,
I.PLTXT,
I.Projectinhoud,
I.projectengineer,
I.Sold_to_SAP,
I.YYMM_CL_SAP,
COALESCE(M.NAME1,''),
COALESCE(M.ORT01,'')
FROM dbo.Project_info I
LEFT JOIN dbo.KNA1_mailing_adressen M ON M.KUNNR=I.SOLD_to_SAP
WHERE projectengineer = ''
INTERSECT
SELECT I.projnr,
I.datum,
I.techn_adv,
I.PLTXT,
I.Projectinhoud,
I.projectengineer,
I.Sold_to_SAP,
I.YYMM_CL_SAP,
COALESCE(M.NAME1,''),
COALESCE(M.ORT01,'')
FROM dbo.Project_info I
LEFT JOIN dbo.KNA1_mailing_adressen M ON M.KUNNR=I.SOLD_to_SAP
WHERE projnr LIKE '%%'
ORDER BY datum DESC
[/SQL]

oops.. je moet de middelste order by weghalen!
 
Laatst bewerkt:
wat bedoel je met intersect??
want ik krijg een fout melding? syntax om precies te zijn op de intersect
 
je moet die middelste order by weghalen
precies BOVEN intersect

het wordt dan
[SQL]
[SQL]
SELECT I.projnr,
I.datum,
I.techn_adv,
I.PLTXT,
I.Projectinhoud,
I.projectengineer,
I.Sold_to_SAP,
I.YYMM_CL_SAP,
COALESCE(M.NAME1,''),
COALESCE(M.ORT01,'')
FROM dbo.Project_info I
LEFT JOIN dbo.KNA1_mailing_adressen M ON M.KUNNR=I.SOLD_to_SAP
WHERE projectengineer = ''
INTERSECT
SELECT I.projnr,
I.datum,
I.techn_adv,
I.PLTXT,
I.Projectinhoud,
I.projectengineer,
I.Sold_to_SAP,
I.YYMM_CL_SAP,
COALESCE(M.NAME1,''),
COALESCE(M.ORT01,'')
FROM dbo.Project_info I
LEFT JOIN dbo.KNA1_mailing_adressen M ON M.KUNNR=I.SOLD_to_SAP
WHERE projnr LIKE '%%'
ORDER BY datum DESC
[/SQL]

[/SQL]
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan