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

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Sekundær søgning baseret på primær søgning
Fra : Arne Feldborg


Dato : 24-04-03 07:46


Haløjsa...

Hvordan løser man mest smart (i Php og MySql) dette problem. Og ja, jeg
er stadigvæk absolut nybegynder.

EnTabel:
Søren Hansen, Viborgvej, 32, Herning, mand, osv, bla, bla,
Karen Hansen, Viborgvej, 32, Herning, kone, osv, bla, bla,
Ellen Hansen, Viborgvej, 32, Herning, barn, osv, bla, bla,
Peter Hansen, Viborgvej, 32, Herning, barn, osv, bla, bla,
Kristen Pedersen, Holstebrovej, 56, Herning, mand, osv, bla, bla,
Johanne Pedersen, Holstebrovej, 56, Herning, kone, osv, bla, bla,
Jens Pedersen, Holstebrovej, 56, Herning, barn, osv, bla, bla,
Karen Pedersen, Holstebrovej, 56, Herning, barn, osv, bla, bla,
Ole Pedersen, Holstebrovej, 56, Herning, barn, osv, bla, bla,
Erik Kristensen, Vejlevej, 21, Herning, mand, osv, bla, bla,
Maren Kristensen, Vejlevej, 21, Herning, kone, osv, bla, bla,
Johanne Kristensen, Vejlevej, 21, Herning, barn, osv, bla, bla,
Ellen Kristensen, Vejlevej, 21, Herning, barn, osv, bla, bla,
Johan Kristensen, Vejlevej, 21, Herning, barn, osv, bla, bla,

En søgning på "Ellen%" i felt 1 vil returnere to rækker:
Ellen Hansen, Viborgvej, 32, Herning, barn, osv, bla, bla,
Ellen Kristensen, Vejlevej, 21, Herning, barn, osv, bla, bla,

Men jeg vil gerne have listet alle der bor på samme adresse, og med den
person der søges på fremhævet:

<br>Søren Hansen, Viborgvej, 32, Herning, mand, osv, bla, bla,
<br>Karen Hansen, Viborgvej, 32, Herning, kone, osv, bla, bla,
<br><b>Ellen Hansen, Viborgvej, 32, Herning, barn, osv, bla, bla,</b>
<br>Peter Hansen, Viborgvej, 32, Herning, barn, osv, bla, bla,
<p>
<br>Erik Kristensen, Vejlevej, 21, Herning, mand, osv, bla, bla,
<br>Maren Kristensen, Vejlevej, 21, Herning, kone, osv, bla, bla,
<br>Johanne Kristensen, Vejlevej, 21, Herning, barn, osv, bla, bla,
<br><b>Ellen Kristensen, Vejlevej, 21, Herning, barn, osv, bla, bla,</b>
<br>Johan Kristensen, Vejlevej, 21, Herning, barn, osv, bla, bla,

Skal man bare søge tabellen igennem og finde alle forkomster af Ellen,
aflæse adressen på den første og så søge igen, osv., eller findes der en
mere fiks metode.?

Kan man feks. definere at hver gang man har fundet en "Ellen" så skal
der søges x-antal poster tilbage og x-antal poster frem - men nu med
adressen som det der søges på.?


--
mvh, A:\Feldborg

Folketælllinger Hammerum og Bøling herreder, kirkebøger Hammerum herred
http://www.haunstrup.dk/feldborg/genealogi/download/

 
 
Jacob Bohn Lorensen (24-04-2003)
Kommentar
Fra : Jacob Bohn Lorensen


Dato : 24-04-03 10:57

>>>>> "Arne" == Arne Feldborg <feldborg@haunstrup.dk> writes:

Arne> Haløjsa...

Arne> Hvordan løser man mest smart (i Php og MySql) dette
Arne> problem. Og ja, jeg er stadigvæk absolut nybegynder.

Arne> En søgning på "Ellen%" i felt 1 vil returnere to rækker:
Arne> Ellen Hansen, Viborgvej, 32, Herning, barn, osv, bla, bla,
Arne> Ellen Kristensen, Vejlevej, 21, Herning, barn, osv, bla,
Arne> bla,

Arne> Men jeg vil gerne have listet alle der bor på samme adresse,
Arne> og med den person der søges på fremhævet:

Det burde kunne gøres ved at "join"e tabellen med sig selv således:

Lad tabellen hedde personer.

Eksempel 1:
------------
select b.navn, a.adresse
from
personer a, personer b
where
a.navn like "Ellen%"
and a.adresse = b.adresse
order by
a.adresse
;


Med alle bells-and-whistles (i.e tilføj <b>...</b> til navnet, der
søges på, sortere alle med samme adresse sammen, samt sørge for at
det, der søges på sorteres øverst i hver gruppe).

Eksempel 2
------------

select
if (b.navn like "Ellen%", concat( "<b>", b.navn, "</b>"), b.navn),
a.adresse
from
personer a, personer b
where
a.navn like "Ellen%" and
a.adresse = b.adresse
order by
a.adresse asc,
(b.navn like "Ellen%") desc
;


--
Jacob Lorensen; Mosebuen 33, 1.; DK-2820 Gentofte, Denmark; +45 39560401
PGPid: 0x752EB4DE Fingerprint: F609A0BAFF393EA904F7-F344680F8EED752EB4DE

Arne Feldborg (25-04-2003)
Kommentar
Fra : Arne Feldborg


Dato : 25-04-03 07:20

Jacob Bohn Lorensen <jacob.lorensen@e-postboks.dk> skrev 24 Apr 2003
11:57:10 +0200


> Arne> Men jeg vil gerne have listet alle der bor på samme adresse,
> Arne> og med den person der søges på fremhævet:
>
>Det burde kunne gøres ved at "join"e tabellen med sig selv således:
>
>Lad tabellen hedde personer.
>
Tak for forslaget, jeg vil prøve at eksperimentere lidt med det.


--
mvh, A:\Feldborg

Folketælllinger Hammerum og Bøling herreder, kirkebøger Hammerum herred
http://www.haunstrup.dk/feldborg/genealogi/download/

Jacob Bohn Lorensen (25-04-2003)
Kommentar
Fra : Jacob Bohn Lorensen


Dato : 25-04-03 07:59

>>>>> "Arne" == Arne Feldborg <feldborg@haunstrup.dk> writes:

Arne> Jacob Bohn Lorensen <jacob.lorensen@e-postboks.dk> skrev 24
Arne> Apr 2003 11:57:10 +0200


Arne> Men jeg vil gerne have listet alle der bor på samme adresse,
Arne> og med den person der søges på fremhævet:
>> Det burde kunne gøres ved at "join"e tabellen med sig selv
>> således:
>>
>> Lad tabellen hedde personer.
>>
Arne> Tak for forslaget, jeg vil prøve at eksperimentere lidt med
Arne> det.

Velbekomme.

Jeg kan ikke længere "lide" mit eksempel 2 - iflg. min smag skal der
ikke være html-formatteringskode i database-førespørgselen. Det ville
jeg tage ud og i stedet lade php-koden holde øje med om man starter på
en ny adresse og formattere ud fra den viden.

Hvis du har mange rækker kan et join af tabellen med sig selv være ret
omfattende. I så tilfælde vil du nok stå dig ved at afgrænse de måder
og mønstre man kan søge på og lave indexer som understøtter netop de
søgemåder.

Muligvis vil MySQL's "JOIN" syntax være mere effektiv --- men jeg ved
ikke om det internt bliver udført ens. Dvs.

(utestet)

select
b.navn, adresse
from
personer a left join personer b using (adresse)
where
a.navn like "Ellen%" and
order by
adresse asc,
(b.navn like "Ellen%") desc
;


Jacob.

--
Jacob Lorensen; Mosebuen 33, 1.; DK-2820 Gentofte, Denmark; +45 39560401
PGPid: 0x752EB4DE Fingerprint: F609A0BAFF393EA904F7-F344680F8EED752EB4DE

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste