27. januar 2010 - 22:04Der 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.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
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:
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.
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.
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.
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.
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.
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'");
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:
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'");
$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å ?
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.
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.