MSSQL zoekfunctie
Ik ben bezig met een MSSQL database van meer dan 80000 records.
Ik wil hier een zoekfunctie bij maken zodat mensen niet heel de lijst van alle records door hoeven te zoeken.
Ik limiteer nu de records met de SELECT TOP functie.
Heeft er iemand een idee hoe ik dat met php kan doen?
Verder heb ik nog een probleem.
Als ik sorteer op DESC, dan worden de records weergegeven vanaf 9999, dan 9998, etc, etc. Enig idee hoe dit kan?
Groeten,
Gewijzigd op 01/01/1970 01:00:00 door Robin Avoort
Over dat laatste, dan moet je ASC doen ;-)
1ste record: 1
2e record: 10
3e record: 100
4e record: 1000
5e record: 10000
6e record: 10001
etc
Ik wil dat het laatste record bovenaan staat.. dan heb je toch DESC nodig?
Hm, dan ligt het toch echt aan MSSQL denk ik... Die ziet dat een 9 groter is dan een 1 ;-)
Je hebt niet toevallig een oplossing voor mijn eerste probleem? :P
Deze moet kloppen, wel even aanpassen natuurlijk. Houd er rekening mee dat in tegenstelling tot MySQL, MSSQL wél verschil ziet tussen ' en " ;-) (MSSQL Quote Escapen )
Succes!
Ik heb namelijk ongeveer de zelfde code als die je gepost hebt.
Ik krijg alleen een error wanneer ik met post/get aan de gang ga.
Dat van die ' en " wist ik nog niet.. bedankt :)
Nog een klein vraagje tussendoor, (als ik nog niet teveel gevraagd heb :o)
LIKE, kun je dat ook vervangen door CONTAIN ofzo. Ik bedoel dat je ook een deel van een woord kunt zoeken?
LIKE vergelijkt al met woorden waar de waarde in voorkomt.
ok bedankt voor je reactie
Robin schreef op 02.11.2009 12:24:
Dan krijg ik iets heel raars :s
1ste record: 1
2e record: 10
3e record: 100
4e record: 1000
5e record: 10000
6e record: 10001
etc
1ste record: 1
2e record: 10
3e record: 100
4e record: 1000
5e record: 10000
6e record: 10001
etc
...waarschijnlijk gebruik je een VARCHAR veld voor je artikelnummers, gebruik in plaats daarvan een INT veld.
enige probleem is, dat er voor elk nummer een " staat..
Dat komt omdat ik een csv bestand geimporteert heb in mijn database. Elk gegeven word daarin tussen "" gezet. In mijn query voor het importeren had ik als scheidingsteken "," ingesteld, dus geen enkele andere record heeft nog een ". (alleen de laatste, heeft achteraan een ")
Is er een manier om dit teken snel weg te halen? (iig zo snel mogelijk, want het lijkt me niet dat een database met zoveel records zo 1,2,3 al die tekens verwijdert worden xD)
Alleen het zoeken werkt nu nog niet :(
Iemand nog ideeën?
@Robin, plaats je huidige zoek-SQL eens? En wát werkt er precies niet?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php
$conn = odbc_connect('MyDSN','naam','ww');
$query = "SELECT * FROM Table_1 WHERE StartDate LIKE ????";
$result=odbc_exec($conn, $query);
echo "<table border=\"1\"><tr>";
$colName = odbc_num_fields($result);
for ($j=1; $j<= $colName; $j++)
{
echo "<th>";
echo odbc_field_name ($result, $j );
echo "</th>";
}
while(odbc_fetch_row($result))
{
echo "<tr>";
for($i=1;$i<=odbc_num_fields($result);$i++)
{
echo "<td>";
if(odbc_result($result,$i))
echo odbc_result($result,$i);
else
echo "-";
echo "</td>";
}
echo "</tr>";
}
echo "</td> </tr>";
echo "</table >";
odbc_close ($conn);
?>
$conn = odbc_connect('MyDSN','naam','ww');
$query = "SELECT * FROM Table_1 WHERE StartDate LIKE ????";
$result=odbc_exec($conn, $query);
echo "<table border=\"1\"><tr>";
$colName = odbc_num_fields($result);
for ($j=1; $j<= $colName; $j++)
{
echo "<th>";
echo odbc_field_name ($result, $j );
echo "</th>";
}
while(odbc_fetch_row($result))
{
echo "<tr>";
for($i=1;$i<=odbc_num_fields($result);$i++)
{
echo "<td>";
if(odbc_result($result,$i))
echo odbc_result($result,$i);
else
echo "-";
echo "</td>";
}
echo "</tr>";
}
echo "</td> </tr>";
echo "</table >";
odbc_close ($conn);
?>
Wanneer ik op Submit klik (in index.php) wordt er nu nergens naar gezocht. ik weet niet wat ik in moet vullen bij ????.
Gewijzigd op 01/01/1970 01:00:00 door Robin Avoort
Maar goed, doe je dit via POST of via GET? (Staat in je form: method="POST" of method="GET")
Als dit via GET is, roep je hem op dmv $_GET['search'] (of hoe je input hebt genaamd). Daarna doe je je query zo:
In mijn form heb ik aangegeven "GET", heb de juiste namen gebruikt, maar het wil niet werken...
Als ik nu iets intyp(maakt niet uit wat) krijg ik gewoon de hele database te zien.
Ik had bij input veld een ID gegeven, maar nu heb ik er NAME bij gezet, en nu werkt het.
Bedankt voor jullie hulp allemaal!
Geen probleem, weet wat voor een draak MSSQL kan zijn (niet voor niets een paar keer wat over geschreven in m'n blog ;-))