saluki-dk skrev:
> Jeg har to små problemer - som nok vil et par stykker til at skrige af
> grin.
Der er ingen der griner hvis de husker hvordan de selv begyndte.
> Al begyndelse er svær
Nemlig.
> Problem #1:
> Jeg skal finde nogle filnavne der begynder med "nr" og slutter med
> "htm" (... og hvor svært kan det lige være !!!!)
> if (ereg("nr*htm",$file)) { giver ingen svar
> Men
> if (ereg("^(nr*)",$file)) {
> if (ereg("htm",$file)) { virker
> Hvorfor f... skal jeg bruge 2 IF for at få det til at virke ?
Fordi du sætter to betingelser. Rent teknisk kan man godt komme
af med det ene IF, men det er ikke bedre på nogen måde. Nogle vil
mene at det er lidt mindre læsevenligt:
if (ereg("^(nr*)",$file) and ereg("htm",$file)) ...
Det er jo bare en anden måde at gøre det samme på [1].
> Problem #2.
> Men da jeg øgede retighederne til informationer der ligger
> undertabellen "mklitter" - så går det helt galt:
> $query = "SELECT CONCAT(Tenbase.kennel,' ',Tenbase.navn) AS hundnavn
> FROM Tenbase
> LEFT OUTER JOIN mklitter ON Tenbase.lnr = mklitter.lnr
> WHERE Tenbase.inr IN (" . $tlist . ")
> and (Tenbase.ejer_nr=$user
> or Tenbase.coejer_nr=$user
> or mklitter.bnr=$user
> or mklitter.cbnr=$user)
> ORDER BY hundnavn";
> ....giver følgende fejl:
> The SELECT would examine more rows than MAX_JOIN_SIZE.
En JOIN producere N*M resultater hvis den ene tabel har N
elementer og den anden M - også selv om nogle betingelser
bagefter reducerer slutantallet til ganske få. Hvis N*M er mindre
end det tilladte maks, går det fint, men ellers går det galt.
Jeg snakkede engang med en fyr der var i gang med noget
databasesøgning. Det kørte *ekstremt* langsomt, og så sagde han
med et skævt grin: "Tja, måske skulle jeg ikke have lavet det med
syvogtyve JOIN's oven i hinanden".
[1] Det er egentlig sprogafhængigt. Nogle sprog undersøger begge
betingelser ved en AND. Andre bruger kortsluttet boolesk algebra
hvor undersøgelsen stopper så snart man kan forudsige resultatet.
Eksempler:
if (0 and 5/0) echo "Hvad? Det er jo ulovligt!";
else echo "Vi springer over hvor gærdet er lavest";
PHP giver ikke fejl for det kommer slet ikke til den ulovlige
division. Allerede ved 0 er det klart at det samlede udtryk
bliver falsk, og så afsluttes den linje.
I [har glemt hvilket sprog] vil begge betingelser blive
undersøgt, og så stopper programmet med en fejl.
Hvis man skriver koden med to if'er, virker det ens i begge slags
systemer.
--
Bertel
http://bertel.lundhansen.dk/ http://fiduso.dk/