Avatar billede RippieUK Nybegynder
27. januar 2010 - 22:04 Der er 15 kommentarer og
1 løsning

MYSQL_QUERY Update

Hej alle sammen, lige et hurtigt spørgsmål angående mysql_query update kommando.

Jeg har en tabel der indeholder navn og produkter. Jeg vil gerne have en tabel der kan updatere produkter uden at slette hvad der allerede er i den. så f.eks

ID - NAVN - PRODUKTER
1 - Joe - produkt1, produkt2

Jeg vil så gerne tilføje produkt3 til joe's produkter så den kommer til at ligne produkt1, produkt2, produkt3.

Tak på forhånd
27. januar 2010 - 22:16 #1
Problemet er din datastruktur.  Du 'normaliserer' dine data, bringer dem til en struktur hvor det er let at indsaette, soege, o.s.v. ved at putte personer og produkter i hver sin tabel, for eksempel saaledes:

Tabel Persoon
ID  PERSONNAVN
1    Joe
2    John
3    Josef

Tabel Produkt
ID    PRODUKTNAVN PERSONID
1    produkt1    1
2    produkt2    1
3    produkt7    2

Personid er saa fremmednoegle til person, viser hvilke produkter der hoerer til hvilke personer.

Naar Joe saa skal have endnu et produkt, produkt 3, saa er din query:  INSERT INTO Produkt(produktnavn, personid) VALUES('produkt3', 1)

Hvis du vil have en oversigt over hvilke produkter Joe har er din query:

SELECT * FROM Persoon pe JOIN Produkt pr ON pe.id=pr.personid
Avatar billede RippieUK Nybegynder
27. januar 2010 - 22:19 #2
Det var sådan jeg ville have det fra starten af, men en ven hjalp med med scriptet og han mente at bedste måde ville være at have ID - NAVN - PRODUKTER.

Kunne være jeg skulle splitte dem op som du forslår, men vil først lige vide om det er muligt i det hele taget at gøre som jeg spurgte om.
27. januar 2010 - 22:48 #3
Jeg vil foreslaa at du spoerger din ven hvordan man goer det med den struktur.  Det skal da nok kunne lade sig goere med en eller anden hokus polus loesning, men saa skal du sandsynligvis til at opfinde en ny hokus pokus loesning naar du kommer til det naeste du gerne vil goere med dine data.  Bring dine data i en fornuftig 'normaliseret' struktur, saa kan du goere stort set alt mellem himmel og jord ved hjaelp af standard SQL queries.
Avatar billede RippieUK Nybegynder
27. januar 2010 - 22:50 #4
tusinde tak begge to. vil tage et kig på det.
Avatar billede RippieUK Nybegynder
28. januar 2010 - 00:36 #5
Ville det vaere en ide at have 3 tabeller ? en for personer, en for produkter og en der linker produkter og personer sammen ?

saa det bliver:

Tabel Persoon
ID  PERSONNAVN
1    Joe
2    John
3    Josef

Tabel Produkt
ID    PRODUKTNAVN
1    produkt1
2    produkt2
3    produkt7

Tabel WhoCanDoWhat (link personer til produkter)
ID    produktid    personid
1    1            1
2    3            2
3    1            1

eller er det dumt ?
28. januar 2010 - 05:58 #6
Hvis hver person kan have flere produkter samtidig med at hvert produkt kan hoere til flere personer, en mange-til-mange relation, saa fandt du standard loesningen.  Til lykke.  Lige en observation:  I din WhoCanDoWhat person viser du i raekke 1 at produkt1 hoerer sammen med person1 og i tredje raekke viser du igen at produkt1 hoerer sammen med person1.  Det er ikke 'tilladt' i relationelle databaser at vise hver information mere end en gang, i dette tilfaelde at et bestemt produkt hoerer til en bestemt person.  Hvis man laver saadan en tabel boer man med det samme lave et unique index over produktid og personid saa systemet automatisk afviser dubletter.

Jeg svarede ud fra formodningen om en-til-mange relation mellem person og produkt saa hver person kunne have flere produkter, men hvert produkt kun hoerer til en person.  I saadanne tilfaelde skal der kun vaere de to tabeller.
Avatar billede RippieUK Nybegynder
28. januar 2010 - 11:05 #7
Hej Christian,

Det er min fejl. min tabel skulle ha vist at et produkt kan hoere til flere personer, og at personer kan have flere produkter.

saa hvis det er tilfaelde ville en mange-til-mange loesning vare vejen frem og jeg behoever en ny tabel.

Tusinde tak Christian.
28. januar 2010 - 12:06 #8
Jeg tror at vi sammen fandt loesningen paa problemet, nye tabeller der reflekterer mange-til-mange relationerne, og saa kan du opdatere alt hvad du  behoever.
Avatar billede RippieUK Nybegynder
28. januar 2010 - 13:50 #9
Christan, foer jeg smider point, kan du ikke lige hjalpe mig med den her.

Jeg vil gerne vide hvem der kan et produkt fra tabellen "WhoCanDoWhat" og gør det med den her query

$query = @mysql_query("SELECT resourceid FROM WhoCanDoWhat WHERE productcode = '".mysql_real_escape_string($productCode)."' ");
$row = @mysql_fetch_array($query);

Når jeg nu har 3 personer i WhoCanDoWhat med en bestemt product code, så med en while skulle jeg kunne listeÆ Person1, Person2, Person3
Men hvis jeg gerne vil have deres fulde navn fra "people" tabellen, og så liste fulde navne istedet ? så det bliver fulde navn1, fulde navn2, fulde navn3.

Hvordan gør jeg det ?
Avatar billede RippieUK Nybegynder
28. januar 2010 - 14:01 #10
Ville noget som det her virke ?

$query = @mysql_query("SELECT * FROM WhoCanDoWhat WHERE productcode = '".mysql_real_escape_string($productCode)."' ");
$numberOfPeople = @mysql_num_rows($query);
$row2 = @mysql_fetch_array($query);

$query2 = @mysql_query("SELECT resourcename FROM people WHERE resourceid = '".mysql_real_escape_string($row2['resourceid'])."' ");
while($row = @mysql_fetch_array($query2)) {
    echo "$row['resourcename']<br />";
}
28. januar 2010 - 19:22 #11
RippieUK, saa er jeg her igen.  Jeg sneg mig til at kikke paa eksperten paa arbejde men havde ikke tid til at svare.

Fra dataen i dine tre tabeller i #5 vil du gerne vide hvilke personer der 'kan' et bestemt produkt.  Yderligere vil du fra en hjemmeside kunne vaelge hvilket produkt du vil have, og du vil skrive resultatet ud paa hjemmesidenh.  Har jeg forstaaet det rigtigt?

Trin for trin - inden vi spekulerer paa hjemmeside og php kode saa lad os faa mysql querien korrekt.  For at goere det konkret saa lavede jeg i min egen mysql dine tre tabeller, jeg kaldte dem rippiePerson, rippieProdukt, og rippieWho.  Ellers brugte jeg de samme navne som dig.  Og jeg puttede de samme data i tabellerne undtagen at jeg rettede den illegale tredje raekke i rippieWho til 3,1,2.  Nedenfor skal jeg gengive sql scripten.

Hvis du saa er tilfreds med personid og produktid og vi antager at det er produkt1 (med produktid = 1) du er ude efter, saa er querien denne:

SELECT * FROM rippieWho WHERE produktid = 1;

Det giver dette resultat:

id  produktid  personid 
      1 1 1
      3 1 2

Men hvis du gerne vil se personnavnet og produktnavnet saa skal du 'joine' alle tre tabeller saaledes:

SELECT personnavn, produktnavn FROM rippiePerson pe
JOIN rippieWho w ON pe.id = w.personid
JOIN rippieProdukt pr ON w.produktid = pr.id
WHERE pr.produktnavn = 'produkt1'

som giver resultatet

personnavn  produktnavn 
Joe produkt1
John produkt1

I querien giver jeg tabellerne et kort navn for at undgaa at skulle sige "..join rippieWho on rippiePerson.id = rippieWho.personid.."

Hvis du saa paa hjemmesiden laver en variabel $produkt med det produktnavn du vil have og du vil have vaerdinerne skrevet ud paa hjemmesiden saa bliver koden for eksempel denne:

$query = mysql_query("SELECT personnavn, produktnavn
FROM rippiePerson pe
JOIN rippieWho w ON pe.id = w.personid
JOIN rippieProdukt pr ON w.produktid = pr.id
WHERE pr.produktnavn = '$produkt'");

while($row = mysql_fetch_array(&query))
echo $row['personnavn'] . " " . $row['produktnavn'] . "<br/>";

Det kan du naturligvis brodere videre paa, for eksempel lave en tabel til dine vaerdier.  Hvis du ikke behoever produktnavnet skrevet ud forkorter du din query til "SELECT personnavn FROM .... og forkorter til echo $row['personnavn'];

Jeg haaber du kan bruge det.  Til slut, her er tabellerne og dataerne som jeg putted i mysql:

CREATE TABLE rippiePerson(id INT, personnavn VARCHAR(10));
CREATE TABLE rippieProdukt(id INT, produktnavn VARCHAR(10));
CREATE TABLE rippieWho(id INT, produktid INT, personid INT);

INSERT INTO rippiePerson VALUES(1, 'Joe');
INSERT INTO rippiePerson VALUES(2, 'John');
INSERT INTO rippiePerson VALUES(3, 'Josef');

INSERT INTO rippieProdukt VALUES(1, 'produkt1');
INSERT INTO rippieProdukt VALUES(2, 'produkt2');
INSERT INTO rippieProdukt VALUES(3, 'produkt7');

INSERT INTO rippieWho VALUES(1,1,1);
INSERT INTO rippieWho VALUES(2,3,2);
INSERT INTO rippieWho VALUES(3,1,2);
Avatar billede RippieUK Nybegynder
28. januar 2010 - 22:52 #12
Kan ikke få den til at virke. siden er bare blank. Her er min kode:
<?php

    include('detail.php');
   
    #connect to db server, select db   
    $connectionString = @mysql_connect(host, db_user, db_pass);
    $selectDb = @mysql_select_db(db);
   
$query = @mysql_query("SELECT *
FROM people po
JOIN WhoCanDoWhat w ON po.resourceid = w.resourceid
JOIN products pr ON w.productcode = pr.productcode
WHERE pr.productcode = 'mwg'");

$num_rows = mysql_num_rows($query);
if($num_rows == 0) {
echo "not working";
}
else {
    while($row = mysql_fetch_array(&query)) {
    echo $row['resourcename'] . " " . $row['productcode'] . "<br/>";
    }
}
   
    @mysql_close($connectionString);
?>

Lige nu ser mine tabeller således ehr ud:
People
ID | RESOURCEID | RESOURCENAME
1  | ronniej    | Ronnie Jorgensen


Products
ID | PRODUCT | PRODUCTCODE | VENDORCODE
1  | McAfee Web Gateway | mwg | mcafee


WhoCanDoWhat
ID | PRODUCTCODE | RESOURCEID
1  | mwg | ronniej

Har jeg glemt noget her ? hvis du ikke har noget imod det. kan du ikke fange mig på rippie @ hotmail . co . uk ??
Avatar billede RippieUK Nybegynder
28. januar 2010 - 22:58 #13
Har jeg ret i flg: ??

$query = mysql_query("SELECT personnavn, produktnavn ## Kan du lave * her og kan jeg selecte produktnavn selvom den ikke er at finde i rippiePerson ?

FROM rippiePerson pe ## vi fortæller fra hvilken tabel og forkorter den pe istedet for rippiePerson ?

JOIN rippieWho w ON pe.id = w.personid ## vi "adder" rippieWho til rippieperson og igen vi forkorter rippieWho og linker den med pe.id til w.personid ?

JOIN rippieProdukt pr ON w.produktid = pr.id ## samme som før, bare med en anden tabel ?

WHERE pr.produktnavn = '$produkt'");  ## og her siger jeg hvor pr.produktnavn kan være hvad jeg vil søge på ?
Avatar billede RippieUK Nybegynder
28. januar 2010 - 23:09 #14
Syntax error !!! grrr fik det løst nu. men svar gerne på hvordan jeg fortolker den mysql query
29. januar 2010 - 09:13 #15
RippieUK, du indledte dit oprindelige spoergsmaal med:  "Hej alle sammen, lige et hurtigt spørgsmål..."

Jeg mente at jeg svarede paa dit spoergsmaal, og i din nr. #7 syntes jeg ogsaa at du gav udtryk for det.  Saa jeg oprettede et svar for at faa de udlovede points og afslutte spoergsmaalet.  Men du sagde:  "Christan, foer jeg smider point, kan du ikke lige hjalpe mig med den her."  Jeg skulle have sagt:  "Afslut foerst dit oprindelige spoergsmaal og giv points, og har du yderligere problemer saa opret et nyt spoergsmaal med disse.  Saa bliver det ogsaa set af alle eksperten-medlemmer hvoraf nogle maaske er klogere end jeg."

Jeg forventer nu at du afslutter spoergsmaalet og giver points.  Saa kan jeg og andre se at du foelger reglerne for dette forum.  Hvis du saa opretter nye spoergsmaal saa som:  "Jeg har denne kode... hvordan skal jeg fortolke det?" saa vil jeg sandsynligvis bidrage til det.
Avatar billede RippieUK Nybegynder
29. januar 2010 - 11:37 #16
Christian,

forstår jeg godt. du har fået de point.

Mange tak for din hjælp
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester