/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Første bogstav
Fra : Nikolaj Svendsen


Dato : 14-01-08 16:05

Hej

Er det muligt, at hente ud fra mysql, sådan at første bogstav er mellem
f.eks a-h.



 
 
Peter Brodersen (14-01-2008)
Kommentar
Fra : Peter Brodersen


Dato : 14-01-08 17:44

On Mon, 14 Jan 2008 16:04:51 +0100, "Nikolaj Svendsen"
<nes@logtech.dk> wrote:

>Er det muligt, at hente ud fra mysql, sådan at første bogstav er mellem
>f.eks a-h.

Du kan bruge et såkaldt regulært udtryk:

SELECT navn FROM tabel WHERE name REGEXP '^[a-h]'

--
- Peter Brodersen
Kendt fra Internet

Nikolaj Svendsen (14-01-2008)
Kommentar
Fra : Nikolaj Svendsen


Dato : 14-01-08 18:49


"Peter Brodersen" <usenet2007@ter.dk> skrev i en meddelelse
news:478b913b$0$90262$14726298@news.sunsite.dk...
> On Mon, 14 Jan 2008 16:04:51 +0100, "Nikolaj Svendsen"
> <nes@logtech.dk> wrote:
>
>>Er det muligt, at hente ud fra mysql, sådan at første bogstav er mellem
>>f.eks a-h.
>
> Du kan bruge et såkaldt regulært udtryk:
>
> SELECT navn FROM tabel WHERE name REGEXP '^[a-h]'
>
> --
> - Peter Brodersen
> Kendt fra Internet

Tusinde tak for for hjælpen.



Carsten Pedersen (15-01-2008)
Kommentar
Fra : Carsten Pedersen


Dato : 15-01-08 10:51

Peter Brodersen wrote:
> On Mon, 14 Jan 2008 16:04:51 +0100, "Nikolaj Svendsen"
> <nes@logtech.dk> wrote:
>
>> Er det muligt, at hente ud fra mysql, sådan at første bogstav er mellem
>> f.eks a-h.
>
> Du kan bruge et såkaldt regulært udtryk:
>
> SELECT navn FROM tabel WHERE name REGEXP '^[a-h]'
>

Hvis navn er indekseret, vil flg. være bedre:

SELECT navn
FROM tabel
WHERE name >= 'a' AND name < 'g'

- så søges der kun i de rækker hvor navnet vitterligt starter med
a-h. (Peters løsning vil scanne samtlige rækker i tabellen).

/ Carsten

Nikolaj Svendsen (15-01-2008)
Kommentar
Fra : Nikolaj Svendsen


Dato : 15-01-08 14:22


"Carsten Pedersen" <carsten_at_bitbybybit_dk@example.com> skrev i en
meddelelse news:478C81FA.2050308@example.com...
> Peter Brodersen wrote:
>> On Mon, 14 Jan 2008 16:04:51 +0100, "Nikolaj Svendsen"
>> <nes@logtech.dk> wrote:
>>
>>> Er det muligt, at hente ud fra mysql, sådan at første bogstav er mellem
>>> f.eks a-h.
>>
>> Du kan bruge et såkaldt regulært udtryk:
>>
>> SELECT navn FROM tabel WHERE name REGEXP '^[a-h]'
>>
>
> Hvis navn er indekseret, vil flg. være bedre:
>
> SELECT navn
> FROM tabel
> WHERE name >= 'a' AND name < 'g'
>
> - så søges der kun i de rækker hvor navnet vitterligt starter med
> a-h. (Peters løsning vil scanne samtlige rækker i tabellen).
>
> / Carsten

Kan ikke få det til at virke.

$query = mysql_query("SELECT * film_titel FROM film WHERE film_titel >=
'$tal_1' AND film_titel < '$tal_2' ORDER BY film_titel ASC limit $vis_fra,
$pr_side") or die(mysql_error());



Warning: mysql_result(): supplied argument is not a valid MySQL result
resource in /home/www/minside/test.php on line 31
You have an error in your SQL syntax; check the manual that corresponds to
your MySQL server version for the right syntax to use near 'SELECT FROM film
WHERE film_titel >= 'A' AND film_titel < 'E' ORDER BY film_tite' at line 1



Martin (15-01-2008)
Kommentar
Fra : Martin


Dato : 15-01-08 16:26

Nikolaj Svendsen wrote:
> Kan ikke få det til at virke.
>
> $query = mysql_query("SELECT * film_titel FROM film WHERE film_titel >=
> '$tal_1' AND film_titel < '$tal_2' ORDER BY film_titel ASC limit $vis_fra,
> $pr_side") or die(mysql_error());

fjern film_titel i din select

Nikolaj Svendsen (15-01-2008)
Kommentar
Fra : Nikolaj Svendsen


Dato : 15-01-08 16:57


"Martin" <maaNO@SPAMscandesigns.dk> skrev i en meddelelse
news:478cd06d$0$90266$14726298@news.sunsite.dk...
> Nikolaj Svendsen wrote:
>> Kan ikke få det til at virke.
>>
>> $query = mysql_query("SELECT * film_titel FROM film WHERE film_titel >=
>> '$tal_1' AND film_titel < '$tal_2' ORDER BY film_titel ASC limit
>> $vis_fra, $pr_side") or die(mysql_error());
>
> fjern film_titel i din select

Havde jeg også prøvet det gir den samme fejl



Jesper Juul-Mortense~ (15-01-2008)
Kommentar
Fra : Jesper Juul-Mortense~


Dato : 15-01-08 17:32

On Tue, 15 Jan 2008 14:22:23 +0100, "Nikolaj Svendsen"
<nes@logtech.dk> wrote:

>ORDER BY film_tite' at line 1

Er det en copy/paste/tastefejl at der mangler et l i film_titel?

/Jesper

Nikolaj Svendsen (15-01-2008)
Kommentar
Fra : Nikolaj Svendsen


Dato : 15-01-08 17:49


"Jesper Juul-Mortensen" <na@na.invalid> skrev i en meddelelse
news:8p3v55-hnq.ln1@news.frostbyte.dk...
> On Tue, 15 Jan 2008 14:22:23 +0100, "Nikolaj Svendsen"
> <nes@logtech.dk> wrote:
>
>>ORDER BY film_tite' at line 1
>
> Er det en copy/paste/tastefejl at der mangler et l i film_titel?
>
> /Jesper

Ja det er det



Jesper Juul-Mortense~ (15-01-2008)
Kommentar
Fra : Jesper Juul-Mortense~


Dato : 15-01-08 22:02

On Tue, 15 Jan 2008 17:49:14 +0100, "Nikolaj Svendsen"
<nes@logtech.dk> wrote:

>> Er det en copy/paste/tastefejl at der mangler et l i film_titel?
>>
>Ja det er det

Ok, det ville bare være ærgeligt hvis det var der fejlen lå gemt

/Jesper

Leif Neland (15-01-2008)
Kommentar
Fra : Leif Neland


Dato : 15-01-08 18:05

Nikolaj Svendsen skrev:

>
> $query = mysql_query("SELECT * film_titel FROM film WHERE film_titel >=
> '$tal_1' AND film_titel < '$tal_2' ORDER BY film_titel ASC limit $vis_fra,
> $pr_side") or die(mysql_error());
>
>
>
> Warning: mysql_result(): supplied argument is not a valid MySQL result
> resource in /home/www/minside/test.php on line 31
> You have an error in your SQL syntax; check the manual that corresponds to
> your MySQL server version for the right syntax to use near 'SELECT FROM film
> WHERE film_titel >= 'A' AND film_titel < 'E' ORDER BY film_tite' at line 1
>
>
Hvis du bruger
.... or die("Error at query: <br>".$query."<br><br>".mysql_error())

Så kan man se, hvad MySql faktisk bliver fodret med i stedet for hvad du
tror...

Der er ihvertfald gået noget galt i copy/paste, fordi du i php skriver
SELECT * film_titel FROM
og i fejlmeddelelsen
SELECT FROM

Begge dele er forkert, rigtige muligheder er
SELECT * FROM eller SELECT film_titel FROM

Leif

Nikolaj Svendsen (15-01-2008)
Kommentar
Fra : Nikolaj Svendsen


Dato : 15-01-08 18:10


"Leif Neland" <leif@neland.dk> skrev i en meddelelse
news:478ce7b4$0$15876$edfadb0f@dtext01.news.tele.dk...
> Nikolaj Svendsen skrev:
>
>>
>> $query = mysql_query("SELECT * film_titel FROM film WHERE film_titel >=
>> '$tal_1' AND film_titel < '$tal_2' ORDER BY film_titel ASC limit
>> $vis_fra, $pr_side") or die(mysql_error());
>>
>>
>>
>> Warning: mysql_result(): supplied argument is not a valid MySQL result
>> resource in /home/www/minside/test.php on line 31
>> You have an error in your SQL syntax; check the manual that corresponds
>> to your MySQL server version for the right syntax to use near 'SELECT
>> FROM film WHERE film_titel >= 'A' AND film_titel < 'E' ORDER BY
>> film_tite' at line 1
> Hvis du bruger
> ... or die("Error at query: <br>".$query."<br><br>".mysql_error())
>
> Så kan man se, hvad MySql faktisk bliver fodret med i stedet for hvad du
> tror...
>
> Der er ihvertfald gået noget galt i copy/paste, fordi du i php skriver
> SELECT * film_titel FROM
> og i fejlmeddelelsen
> SELECT FROM
>
> Begge dele er forkert, rigtige muligheder er
> SELECT * FROM eller SELECT film_titel FROM
>
> Leif

Oki min fejl jeg tror, bare jeg holder mig til min første løsning.



Peter Brodersen (15-01-2008)
Kommentar
Fra : Peter Brodersen


Dato : 15-01-08 18:15

On Tue, 15 Jan 2008 10:50:50 +0100, Carsten Pedersen
<carsten_at_bitbybybit_dk@example.com> wrote:

>Hvis navn er indekseret, vil flg. være bedre:
>
>SELECT navn
>FROM tabel
>WHERE name >= 'a' AND name < 'g'
>
>- så søges der kun i de rækker hvor navnet vitterligt starter med
>a-h. (Peters løsning vil scanne samtlige rækker i tabellen).

Yeps (går ud fra at du mener name < 'i' )

Dog, hvis der skal scannes så store områder, så vil MySQL sikkert
alligevel foretage et fuldt table scan, fordi det kan være lige så
hurtigt som at skulle krydstjekke med et index.

Vi kan håbe på, at MySQL-folkene får lagt nogle optimeringer ind, så
regulære udtryk, der matcher i starten af strengen og LEFT() omskrives
til udtryk, der kan benytte indexes.

--
- Peter Brodersen
Kendt fra Internet

Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409071
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste