/ 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
mysql_fetch_array
Fra : Harald


Dato : 24-08-03 12:39

Hej

Jeg har 3 tabeller (mysql database) som bla. indeholder:

boger:
kategori - int
forfatter - int
forlag - int
Titel - str

forfatter:
Idnr - int
Navn - str

forlag:
Innr - int
Navn - str

Jeg kører så følgende kode:

$conn = mysql_connect("localhost", "en bruger", "en kode");
mysql_select_db("min database");
$sql='SELECT * '
. 'FROM boger,forfatter f,forlag '
. 'WHERE boger.forfatter = f.idnr '
. 'AND boger.forlag = forlag.idnr '
. "AND Kategori={$_GET['Idnr']} ORDER BY f.Navn";

// echo $sql;

$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)) {
extract($row);
// print_r($row);
echo "<tr><td><b>$Titel $Navn</b></td></tr>\n";
}

mysql_close($conn);

problemet er at jeg med $Navn i nederst echo linie kun kan få Navn fra
forlag tabellen, hvordan får jeg Navn fra forfatter tabellen? Jeg kan
selfølgelig bruge $row[x] men hvis jeg så ændre i tabellen virker det ikke
længere. Kan man ikke få en $Forfatter.Navn og en $Forlag.Navn variable?

Mvh
HK




 
 
Mads Madsen (24-08-2003)
Kommentar
Fra : Mads Madsen


Dato : 24-08-03 12:46

Hej
Kan du ikke kalde det $navn1 og $navn2. Jeg tror forlag$navn overskriver
forfatter$navn da det er variabler.

Mads

"Harald" <news@kroning.dk> skrev i en meddelelse
news:3f48a3c7$0$24661$edfadb0f@dread14.news.tele.dk...
> Hej
>
> Jeg har 3 tabeller (mysql database) som bla. indeholder:
>
> boger:
> kategori - int
> forfatter - int
> forlag - int
> Titel - str
>
> forfatter:
> Idnr - int
> Navn - str
>
> forlag:
> Innr - int
> Navn - str
>
> Jeg kører så følgende kode:
>
> $conn = mysql_connect("localhost", "en bruger", "en kode");
> mysql_select_db("min database");
> $sql='SELECT * '
> . 'FROM boger,forfatter f,forlag '
> . 'WHERE boger.forfatter = f.idnr '
> . 'AND boger.forlag = forlag.idnr '
> . "AND Kategori={$_GET['Idnr']} ORDER BY f.Navn";
>
> // echo $sql;
>
> $result = mysql_query($sql);
> while ($row = mysql_fetch_array($result)) {
> extract($row);
> // print_r($row);
> echo "<tr><td><b>$Titel $Navn</b></td></tr>\n";
> }
>
> mysql_close($conn);
>
> problemet er at jeg med $Navn i nederst echo linie kun kan få Navn fra
> forlag tabellen, hvordan får jeg Navn fra forfatter tabellen? Jeg kan
> selfølgelig bruge $row[x] men hvis jeg så ændre i tabellen virker det ikke
> længere. Kan man ikke få en $Forfatter.Navn og en $Forlag.Navn variable?
>
> Mvh
> HK
>
>
>



Harald (24-08-2003)
Kommentar
Fra : Harald


Dato : 24-08-03 13:00

"Mads Madsen" <mazmazen@hotmail.com> skrev i en meddelelse
news:3f48a531$0$97197$edfadb0f@dread12.news.tele.dk...
>
> "Harald" <news@kroning.dk> skrev i en meddelelse
> news:3f48a3c7$0$24661$edfadb0f@dread14.news.tele.dk...
> > Hej
> >
> > Jeg har 3 tabeller (mysql database) som bla. indeholder:
> >
> > boger:
> > kategori - int
> > forfatter - int
> > forlag - int
> > Titel - str
> >
> > forfatter:
> > Idnr - int
> > Navn - str
> >
> > forlag:
> > Innr - int
> > Navn - str
> >
> > Jeg kører så følgende kode:
> >
> > $conn = mysql_connect("localhost", "en bruger", "en kode");
> > mysql_select_db("min database");
> > $sql='SELECT * '
> > . 'FROM boger,forfatter f,forlag '
> > . 'WHERE boger.forfatter = f.idnr '
> > . 'AND boger.forlag = forlag.idnr '
> > . "AND Kategori={$_GET['Idnr']} ORDER BY f.Navn";
> >
> > // echo $sql;
> >
> > $result = mysql_query($sql);
> > while ($row = mysql_fetch_array($result)) {
> > extract($row);
> > // print_r($row);
> > echo "<tr><td><b>$Titel $Navn</b></td></tr>\n";
> > }
> >
> > mysql_close($conn);
> >
> > problemet er at jeg med $Navn i nederst echo linie kun kan få Navn fra
> > forlag tabellen, hvordan får jeg Navn fra forfatter tabellen? Jeg kan
> > selfølgelig bruge $row[x] men hvis jeg så ændre i tabellen virker det
ikke
> > længere. Kan man ikke få en $Forfatter.Navn og en $Forlag.Navn variable?
> >
> > Mvh
> > HK

> Hej
> Kan du ikke kalde det $navn1 og $navn2. Jeg tror forlag$navn overskriver
> forfatter$navn da det er variabler.

Jo, men jeg vil fortrække at beholde feltet Navn i begge tabeller for en go
ordens skyld.

Mvh
HK



Jesper Brunholm (24-08-2003)
Kommentar
Fra : Jesper Brunholm


Dato : 24-08-03 14:47

Ang subject: overvej at bruge mysql_fetch_assoc i.s.f. fetch_array...

Harald wrote:
> Jeg har 3 tabeller (mysql database) som bla. indeholder:

> $sql='SELECT * '

Hvis ikke du vitterligt skal bruge ALT fra tabellerne så er det en
dårlig idé at selecte *, overflødige select-dele er dyre for perfomance
(og det øger absolut ikke overblikket over hvad man får ud at selecte *).

metoden er
SELECT forlag.Navn AS forlagsnavn

> problemet er at jeg med $Navn i nederst echo linie kun kan få Navn fra
> forlag tabellen, hvordan får jeg Navn fra forfatter tabellen? Jeg kan
> selfølgelig bruge $row[x] men hvis jeg så ændre i tabellen virker det ikke
> længere. Kan man ikke få en $Forfatter.Navn og en $Forlag.Navn variable?

Netop dette problem havde du også fået advarsel fra MySQL om hvis du
havde selectet hver kolonne ud separat.

Endelig: spørgsmål som det her hører mere til i dk.edb.database (bare
til en anden gang )

mvh

Jesper Brunholm


Jacob Atzen (24-08-2003)
Kommentar
Fra : Jacob Atzen


Dato : 24-08-03 15:05

Jesper Brunholm <nospam@brunholm-scharff.dk> writes:

> Hvis ikke du vitterligt skal bruge ALT fra tabellerne så er det en
> dårlig idé at selecte *, overflødige select-dele er dyre for
> perfomance.

Det er vist en sandhed med modifikationer. Ved at bruge * skal RDBM'en
ikke frasortere nogen felter og dermed slipper man for et filter i
"pipelinen". Der kan så være nogen IO afhængigheder der gør, at det
alligevel kan være fornuftigt at frasortere dele af posterne - især,
hvis man benytter store datamængder over netværk.

IMHO er det således ikke muligt firkantet at sige at "SELECT *" giver
dårligere perfomance end "SELECT foo, bar".

--
Med venlig hilsen
- Jacob Atzen

Peter Brodersen (24-08-2003)
Kommentar
Fra : Peter Brodersen


Dato : 24-08-03 17:30

On 24 Aug 2003 16:04:31 +0200, Jacob Atzen <jacob@aub.dk> wrote:

>IMHO er det således ikke muligt firkantet at sige at "SELECT *" giver
>dårligere perfomance end "SELECT foo, bar".

Benytter man fx MySQL, vil man, hvis man blot hiver indekseret data
ud, kunne lade den nøjes med at ta' data direkte fra indexet, og ikke
behøve at scanne datafilen.

Men det kan selvfølgelig afhænge fra database til database.

--
- Peter Brodersen

Ugens sprogtip: mayonnaise (og ikke mayonaise)

Harald (24-08-2003)
Kommentar
Fra : Harald


Dato : 24-08-03 17:10

"Jesper Brunholm" <nospam@brunholm-scharff.dk> skrev i en meddelelse
news:biafig$r12$1@sunsite.dk...
> Ang subject: overvej at bruge mysql_fetch_assoc i.s.f. fetch_array...
>
> Harald wrote:
> > Jeg har 3 tabeller (mysql database) som bla. indeholder:
>
> > $sql='SELECT * '
>
> Hvis ikke du vitterligt skal bruge ALT fra tabellerne så er det en
> dårlig idé at selecte *, overflødige select-dele er dyre for perfomance
> (og det øger absolut ikke overblikket over hvad man får ud at selecte *).
>
> metoden er
> SELECT forlag.Navn AS forlagsnavn

Ja jeg skal faktisk bruge alt fra alle tabeller, kun en INT fra den ene
tabel kan jeg undvære.

Nu har min query ændret sig til dette:

$sql='SELECT * FROM (boger '
. 'LEFT JOIN forfatter ON boger.forfatter = forfatter.idnr ) '
. 'LEFT JOIN forlag ON boger.forlag = forlag.idnr '
. "WHERE Kategori={$_GET['Idnr']} ORDER BY forfatter.Navn";

Dvs. at jeg er nød til at remse alle de felter op jeg skal bruge, noget i
stil med:

$sql='SELECT boger.forfatter, boger.titel, osv. osv,, forlag.Navn AS
forlaganavn, forlag.Idnr osv. osv FROM (boger '
. 'LEFT JOIN forfatter ON boger.forfatter = forfatter.idnr ) '
. 'LEFT JOIN forlag ON boger.forlag = forlag.idnr '
. "WHERE Kategori={$_GET['Idnr']} ORDER BY forfatter.Navn";

Man kan ikke bruge * og så derefter angive nogle AS felter på en eller anden
måde?

> > problemet er at jeg med $Navn i nederst echo linie kun kan få Navn fra
> > forlag tabellen, hvordan får jeg Navn fra forfatter tabellen? Jeg kan
> > selfølgelig bruge $row[x] men hvis jeg så ændre i tabellen virker det
ikke
> > længere. Kan man ikke få en $Forfatter.Navn og en $Forlag.Navn variable?
>
> Netop dette problem havde du også fået advarsel fra MySQL om hvis du
> havde selectet hver kolonne ud separat.
>
> Endelig: spørgsmål som det her hører mere til i dk.edb.database (bare
> til en anden gang )

Jo, det har du vist ret i :), jeg havde kikket efter en sql gruppe men kunne
ikke finde en og så mente jeg denne her nok kunne bruges da det jo er php
jeg roder med

Mvh
HK



Anders K. Madsen (24-08-2003)
Kommentar
Fra : Anders K. Madsen


Dato : 24-08-03 17:31

Lyder til du kunne bruge
http://www.webcafe.dk/tipsogtricks/php/mysqlfetchx.html

Mvh.
   Madsen

--
* Anders K. Madsen * http://lillesvin.linux.dk *
* madsen@sjovedyr.dk * Linux, Ruby, PHP and SQL *

Anders K. Madsen (24-08-2003)
Kommentar
Fra : Anders K. Madsen


Dato : 24-08-03 19:24

On Sun, 24 Aug 2003 18:41:17 +0200
"Harald" <news@kroning.dk> wrote:

> "Anders K. Madsen" <madsen@sjovedyr.dk> skrev i en meddelelse
> news:20030824183115.64205554.madsen@sjovedyr.dk...
> > Lyder til du kunne bruge
> > http://www.webcafe.dk/tipsogtricks/php/mysqlfetchx.html
>
> Jeg bruger mysql_fetch_array(), problemet er at MySQL retunerer to felter
> der begge hedder Navn.
>

Nej, problemet er at du bruger extract().

Læs igen.

Mvh.
   Madsen

--
* Anders K. Madsen * http://lillesvin.linux.dk *
* madsen@sjovedyr.dk * Linux, Ruby, PHP and SQL *

Anders K. Madsen (24-08-2003)
Kommentar
Fra : Anders K. Madsen


Dato : 24-08-03 23:53

On Sun, 24 Aug 2003 21:52:42 +0200
"Harald" <news@kroning.dk> wrote:

> "Anders K. Madsen" <madsen@sjovedyr.dk> skrev i en meddelelse
> news:20030824202416.7e14e9a3.madsen@sjovedyr.dk...
> > On Sun, 24 Aug 2003 18:41:17 +0200
> > "Harald" <news@kroning.dk> wrote:
> >
> > > "Anders K. Madsen" <madsen@sjovedyr.dk> skrev i en meddelelse
> > > news:20030824183115.64205554.madsen@sjovedyr.dk...
> > > > Lyder til du kunne bruge
> > > > http://www.webcafe.dk/tipsogtricks/php/mysqlfetchx.html
> > >
> > > Jeg bruger mysql_fetch_array(), problemet er at MySQL retunerer to
> felter
> > > der begge hedder Navn.
> > >
> >
> > Nej, problemet er at du bruger extract().
>
> Det har jeg så gjort nu og det hjalp ikke noget.
>

Så har du ikke læst ret grundigt...

<?php
$q1 = mysql_query("SELECT * FROM tabel1 LIMIT 1");
$q2 = mysql_query("SELECT * FROM tabel2 LIMIT 1");

$array1 = mysql_fetch_assoc($q1);
$array2 = mysql_fetch_assoc($q2);

print "<pre>\n";
print_r($array1);
print_r($array2);
print "</pre>";
?>

Hvis du læser ordentligt igennem, så kan du se at mysql_fetch_array() både
returnerer et numerisk indekseret array og et associativt indekseret array...
D.v.s. det samme som mysql_fetch_assoc() + mysql_fetch_row().

Altså dropper du din extract() og bruger de arrays som mysql_fetch_array()
leverer...
Desuden, hvis du læser manualen til extract(), vil du kunne se at du kan give
den en anden parameter, som fortæller om den skal overskrive variabler eller
prefixe dem med noget andet...

Du har masser af muligheder, du skal bare gide at opdage dem.

Mvh.
   Madsen

--
* Anders K. Madsen * http://lillesvin.linux.dk *
* madsen@sjovedyr.dk * Linux, Ruby, PHP and SQL *

Anders K. Madsen (25-08-2003)
Kommentar
Fra : Anders K. Madsen


Dato : 25-08-03 01:07

On Mon, 25 Aug 2003 01:13:53 +0200
"Harald" <news@kroning.dk> wrote:

>
> Prøv at kikke på mit start indlæg og min sql streng så vil du kunne se at
> det du siger ikke kan lade sig gøre. Men da jeg heller ikke har kunne finde
> en løsning andre steder så har jeg som nogen også her foreslog ændret mine
> felt navne så ingen felter hedder det samme.
>

Jamen, så er det jo et SQL-problem...
Så er det jo godt at der er en manual til MySQL også...
I den vil du, et eller andet sted, finde et eksempel på hvordan man laver joins
med aliases, som jo er det du har brug for.

Eks.:
SELECT forlag.Navn AS forlag_navn, forfatter.Navn AS forfatter_navn, *
FROM forfatter, forlag
ORDER BY forfatter_navn;

Mvh.
   Madsen

--
* Anders K. Madsen * http://lillesvin.linux.dk *
* madsen@sjovedyr.dk * Linux, Ruby, PHP and SQL *

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

Månedens bedste
Årets bedste
Sidste års bedste