/ 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
sikkert simpelt problem i sql sætning
Fra : Lars


Dato : 10-09-01 21:20

----------------------------------------
opret_forbindelse();

$opret_produkt_db1 = "INSERT INTO billeder (billednavn) values
('$billedfil_name')";
sql_query($opret_produkt_db1);

$opret_produkt_db2 = "SELECT id FROM billeder WHERE billednavn =
'$billedfil_name'";
$billedid = sql_query($opret_produkt_db2);

$opret_produkt_db3 = "INSERT INTO produkter (navn, beskrivelse, pris,
gender, producentid, billedid) values ('$opretprodukt[0]',
'$opretprodukt[1]', '$opretprodukt[2]', '$opretprodukt[3]',
$opretprodukt[3], $billedid)";
sql_query($opret_produkt_db3);

luk_forbindelse();
----------------------------------------

Hej!
Jeg har en database med tabellerne billeder og produkter, hvor der så er et
unikt billede til hver produkt.

Jeg skal ha' et billedid ind i en tabel, som hedder produkter, som jeg
senere skal bruge i en "join". Så har jeg prøvet at hente et id for et
billede ved at sammenligne et billednavn med det filnavn, der bliver
uploadet og gemt. Billedid'et får jeg også fint ude i mysql prompten med
ovenstående sql sætning, men den vil altså ikke ind i tabellen produkter?!!
Hvordan kan det være?

Eller gør jeg det helt forkert?

på forhånd tak

lars




 
 
Lars (10-09-2001)
Kommentar
Fra : Lars


Dato : 10-09-01 21:24

glemte lige at sige, at der kommer bare et 0 i tabellen produkter under
billedid





Nis Jorgensen (11-09-2001)
Kommentar
Fra : Nis Jorgensen


Dato : 11-09-01 11:23

On Mon, 10 Sep 2001 22:20:27 +0200, "Lars" <ledj@Zprivat.dk> wrote:

>----------------------------------------
>opret_forbindelse();
>
>$opret_produkt_db1 = "INSERT INTO billeder (billednavn) values
>('$billedfil_name')";
>sql_query($opret_produkt_db1);
>
>$opret_produkt_db2 = "SELECT id FROM billeder WHERE billednavn =
>'$billedfil_name'";
>$billedid = sql_query($opret_produkt_db2);
>
>$opret_produkt_db3 = "INSERT INTO produkter (navn, beskrivelse, pris,
>gender, producentid, billedid) values ('$opretprodukt[0]',
>'$opretprodukt[1]', '$opretprodukt[2]', '$opretprodukt[3]',
>$opretprodukt[3], $billedid)";
>sql_query($opret_produkt_db3);
>
>luk_forbindelse();
>----------------------------------------
>
>Hej!
>Jeg har en database med tabellerne billeder og produkter, hvor der så er et
>unikt billede til hver produkt.

Husk altid at angive:

Hvilket DBMS du bruger

og

Hvordan dine tabeller ser ud

Derudover er det en fordel, hvis du angiver dit problem som "ren" SQL,
snarere end i et eller andet progremmeringssprog som vi så skal lære
syntaxen for.

Anyways, jeg tror dit problem skyldes at billeder.id er et nummerisk
felt, og du prøver at indsætte en streng. Derudover går du over åen
efter vand når du først henter en værdi fra databasen og så sætter den
ind igen. Prøv dette:

opret_forbindelse();

$opret_produkt_db1 = "INSERT INTO billeder (billednavn) values
('$billedfil_name')";
sql_query($opret_produkt_db1);

$opret_produkt_db2 = "
INSERT INTO produkter
(navn, beskrivelse, pris,gender, producentid, billedid)
SELECT
'$opretprodukt[0]', '$opretprodukt[1]', '$opretprodukt[2]',
'$opretprodukt[3]', $opretprodukt[3], id
FROM billeder
WHERE billednavn ='$billedfil_name'
";
sql_query($opret_produkt_db3);

luk_forbindelse();


Alternativt:

$opret_produkt_db2 = "
INSERT INTO produkter
(navn, beskrivelse, pris,gender, producentid, billedid)
VALUES (
   '$opretprodukt[0]', '$opretprodukt[1]', '$opretprodukt[2]',
   '$opretprodukt[3]', $opretprodukt[3],
   (SELECT id FROM billeder
   WHERE billednavn ='$billedfil_name')
)";

hvis dit DBMS bedre kan lide det på den måde.


Lars (11-09-2001)
Kommentar
Fra : Lars


Dato : 11-09-01 14:44

> Husk altid at angive:
>
> Hvilket DBMS du bruger
MySQL (med PHP)

> og
>
> Hvordan dine tabeller ser ud

Produktertabellen:
id (int) navn(varchar) beskrivelse (blob) pris(varchar) gender(enum)
producentid(int) billedid(int)
Billedertabellen:
id (int) billednavn(varchar)

SELECT id FROM billeder WHERE billednavn = '$billedfil_name'

$billedid = sql_query($opret_produkt_db2); /* en variabel, som bliver
smidt ned i næste sqlsætning */

INSERT INTO produkter (navn, beskrivelse, pris, gender, producentid,
billedid) values
('$opretprodukt[0]', '$opretprodukt[1]', '$opretprodukt[2]',
'$opretprodukt[3]', 2, $billedid)";

Det eneste jeg skal ha' gjort er at hente id'et fra billedertabellen og
smide det ind i billedidfeltet i produktertabellen. Jeg kan stadig ikke få
den til det. Det burde være samme datatype, da det bliver hentet fra et id
felt med samme datatype, som det bliver sat ind i produktertabellen. Hvis
jeg derimod bare skrive tallet 2 der, hvor $billedid står, så skriver den
fint tallet ind i feltet, men det er jo lisom værdien i variablen $billedid,
der skal sættes ind i stedet, så det hele kommer til at virke.




Lars (11-09-2001)
Kommentar
Fra : Lars


Dato : 11-09-01 22:38


> $billedid = sql_query($opret_produkt_db2); /* en variabel, som bliver
> smidt ned i næste sqlsætning */
>
> INSERT INTO produkter (navn, beskrivelse, pris, gender, producentid,
> billedid) values
> ('$opretprodukt[0]', '$opretprodukt[1]', '$opretprodukt[2]',
> '$opretprodukt[3]', 2, $billedid)";

Hej igen!
Nu har jeg løst problemet! Man kan ikke sætte en variabel i PHP lig med et
result set og så sætte variablen ($billedid) ned i næste sqlsætning, men man
skal bruge funktionen mysql_insert_id() umiddelbart efter sin sql insert
statement og sætte sin variabel lig den og først derefter kan man bruge den
ned i næste sætning, så virker det.

mvh lars, senior newbie ;)



Nis Jorgensen (12-09-2001)
Kommentar
Fra : Nis Jorgensen


Dato : 12-09-01 08:11

On Tue, 11 Sep 2001 23:37:58 +0200, "Lars" <ledj@Zprivat.dk> wrote:

>
>Nu har jeg løst problemet! Man kan ikke sætte en variabel i PHP lig med et
>result set og så sætte variablen ($billedid) ned i næste sqlsætning, men man
>skal bruge funktionen mysql_insert_id() umiddelbart efter sin sql insert
>statement og sætte sin variabel lig den og først derefter kan man bruge den
>ned i næste sætning, så virker det.

Altså ikke et databaseproblem, men et problem med dit værtssprog. Men
jeg forstår ikke hvorfor mit forslag med kun 2 kald til databasen ikke
virker (hvis du altså har prøvet det) Lettere tilrettet version, idet
jeg ikke kan huske om PHP accepterer linjeskift mellem "":

opret_forbindelse();

$opret_produkt_db1 = "INSERT INTO billeder (billednavn) values
('$billedfil_name')";
sql_query($opret_produkt_db1);

$opret_produkt_db2 = "INSERT INTO produkter (navn, beskrivelse,
pris,gender, producentid, billedid) SELECT '$opretprodukt[0]',
'$opretprodukt[1]', '$opretprodukt[2]','$opretprodukt[3]',
$opretprodukt[3], id FROM billeder WHERE billednavn
='$billedfil_name'";
sql_query($opret_produkt_db2);

luk_forbindelse();

MVH

Nis

Lars (12-09-2001)
Kommentar
Fra : Lars


Dato : 12-09-01 08:54

> Altså ikke et databaseproblem, men et problem med dit værtssprog. Men
> jeg forstår ikke hvorfor mit forslag med kun 2 kald til databasen ikke
> virker (hvis du altså har prøvet det) Lettere tilrettet version, idet
> jeg ikke kan huske om PHP accepterer linjeskift mellem "":

Jeg forsøgte med din anden løsning, men det virkede ikke rigtig, jeg ved
ikke om MySQL kan tage en sqlsætning på den måde, hvor en select optræder
midt i en anden sætning...

mvh lars

>
> opret_forbindelse();
>
> $opret_produkt_db1 = "INSERT INTO billeder (billednavn) values
> ('$billedfil_name')";
> sql_query($opret_produkt_db1);
>
> $opret_produkt_db2 = "INSERT INTO produkter (navn, beskrivelse,
> pris,gender, producentid, billedid) SELECT '$opretprodukt[0]',
> '$opretprodukt[1]', '$opretprodukt[2]','$opretprodukt[3]',
> $opretprodukt[3], id FROM billeder WHERE billednavn
> ='$billedfil_name'";
> sql_query($opret_produkt_db2);
>
> luk_forbindelse();
>
> MVH
>
> Nis



Nis Jorgensen (12-09-2001)
Kommentar
Fra : Nis Jorgensen


Dato : 12-09-01 09:15

On Wed, 12 Sep 2001 09:53:41 +0200, "Lars" <ledj@Zprivat.dk> wrote:

>Jeg forsøgte med din anden løsning, men det virkede ikke rigtig, jeg ved
>ikke om MySQL kan tage en sqlsætning på den måde, hvor en select optræder
>midt i en anden sætning...

Ja, min første løsning går nok bedre i MySQL.


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

Månedens bedste
Årets bedste
Sidste års bedste