18. december 2008 - 08:36
Der er
29 kommentarer og 1 løsning
Hjælp med nogle databaser og php
Hej :) Jeg har et lille problem. Jeg ved ikke hvordan det lige skal laves. De to tabeller det dejer sig om er data og pris. Det jeg vil er at når der står f.eks 5462 i en række i data skal koden gå ind og finde prisen for 5462 i tabellen pris. Håber i forstår hvad jeg mener :) Mvh Benjamin
Annonceindlæg tema
18. december 2008 - 09:05
#1
Du skal bruge inner join hvis du kun vil have rækken såfremt der er en pris, eller left join hvis du også vil have data rækken selvom der ikke er en pris. SELECT d.id, p.pris FROM data d INNER JOIN pris p ON p.FK_dataID = d.id
18. december 2008 - 09:38
#2
Oka. Det forstår jeg ikke rigtig noget af. Jeg har de to tabeller her. Data. Her er rækkerne i data: id pni cpid Pris. her er rækkerne i pris: id cpid pris så i data hvis der er i rækken cpid f.eks. står 8564 Så skal koden gå ind i tabellen pris og finde cpid 8564 og udskrive prisen for den. Håber det hjælp lidt :) Mvh Benjamin
18. december 2008 - 09:47
#3
Sådan: SELECT d.id, p.pris FROM data d INNER JOIN pris p ON p.id = d.cpid
18. december 2008 - 09:53
#4
Så efter den har gjort det. Hvad skal jeg så skrive for og få prisen for den cpid? Mvh Benjamin
18. december 2008 - 10:06
#5
$sql = "SELECT d.id, p.pris FROM data d INNER JOIN pris p ON p.id = d.cpid"; $query = mysql_query($sql); while($result = mysql_fetch_assoc($query)){ echo $result['id'].'-->'.$result['pris']; }
18. december 2008 - 10:26
#6
Hmm. Det virker ikke. Burde den ikke udskrive noget?
18. december 2008 - 10:36
#7
Jo, hvis det er korrekt data indsat. byt lige: $query = mysql_query($sql); til $query = mysql_query($sql) or die(mysql_error()); så kan vi se om der er fejl i queryen
18. december 2008 - 10:44
#8
Den fejl kommer : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'dINNER JOIN pris p ON p.id = d.cpid' at line 1
18. december 2008 - 10:51
#9
dINNER der skal vist være et mellemrum efter d
18. december 2008 - 10:55
#10
Hvordan siger du så den samlede kode skal se ud ?
18. december 2008 - 11:02
#11
$sql = "SELECT d.id, p.pris FROM data d INNER JOIN pris p ON p.id = d.cpid"; $query = mysql_query($sql) or die(mysql_error()); while($result = mysql_fetch_assoc($query)){ echo $result['id'].'-->'.$result['pris']; }
18. december 2008 - 11:05
#12
ny fejl: Could not connect: Lost connection to MySQL server at 'reading authorization packet', system error: 0
18. december 2008 - 11:48
#13
Du må vist kigge på din mysql_connect()
18. december 2008 - 16:53
#14
dette er den samlet kode: <? $con = mysql_connect("localhost","tgr_klan_dk","kodeord"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("tgr_klan_dk", $con); $sql = "SELECT d.id, p.euroadspris FROM euroads d INNER JOIN pris p ON p.id = d.cpid"; $query = mysql_query($sql) or die(mysql_error()); while($result = mysql_fetch_assoc($query)){ echo $result['id'].'-->'.$result['pris']; } ?>
18. december 2008 - 17:57
#15
Kan du ikke smide et sql dump af tabeller og indhold. Det gøres i phpMyAdmin under eksport.
18. december 2008 - 18:50
#16
jo da :) -- -------------------------------------------------------- -- -- Struktur-dump for tabellen `euroads` -- CREATE TABLE `euroads` ( `id` int(11) NOT NULL auto_increment, `pni` varchar(255) NOT NULL default ' ', `cpid` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=60 ; -- -- Data dump for tabellen `euroads` -- INSERT INTO `euroads` VALUES (35, '', ''); INSERT INTO `euroads` VALUES (40, '1234321', '934'); INSERT INTO `euroads` VALUES (39, '', ''); INSERT INTO `euroads` VALUES (38, '', ''); INSERT INTO `euroads` VALUES (37, 'hej1', '166'); INSERT INTO `euroads` VALUES (41, '', ''); INSERT INTO `euroads` VALUES (42, '', ''); INSERT INTO `euroads` VALUES (43, '', ''); INSERT INTO `euroads` VALUES (44, '', ''); INSERT INTO `euroads` VALUES (45, '', ''); INSERT INTO `euroads` VALUES (46, '', ''); INSERT INTO `euroads` VALUES (47, '', ''); INSERT INTO `euroads` VALUES (48, '', ''); INSERT INTO `euroads` VALUES (49, '', ''); INSERT INTO `euroads` VALUES (50, '', ''); INSERT INTO `euroads` VALUES (51, '', ''); INSERT INTO `euroads` VALUES (52, '', ''); INSERT INTO `euroads` VALUES (53, '', ''); INSERT INTO `euroads` VALUES (54, '', ''); INSERT INTO `euroads` VALUES (55, '', ''); INSERT INTO `euroads` VALUES (56, '', ''); INSERT INTO `euroads` VALUES (57, 'hej1', 'hej1'); INSERT INTO `euroads` VALUES (58, '', ''); INSERT INTO `euroads` VALUES (59, '', ''); -- -------------------------------------------------------- -- -- Struktur-dump for tabellen `euroadspris` -- CREATE TABLE `euroadspris` ( `id` int(11) NOT NULL auto_increment, `pris` varchar(255) NOT NULL default ' ', `cpid` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ; -- -- Data dump for tabellen `euroadspris` -- INSERT INTO `euroadspris` VALUES (1, '20', '166');
18. december 2008 - 21:09
#17
Nu sikker den følgene: Unknown column 'p.euroadspris' in 'field list' Med denne kode: <? $con = mysql_connect("localhost","tgr_klan_dk","KODEORD"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("tgr_klan_dk", $con); $sql = "SELECT d.id, p.euroadspris FROM euroads d INNER JOIN euroadspris p ON p.id = d.cpid"; $query = mysql_query($sql) or die(mysql_error()); while($result = mysql_fetch_assoc($query)){ echo $result['id'].'-->'.$result['pris']; } ?>
18. december 2008 - 22:55
#18
Testet og virker: $sql = "SELECT * FROM euroads ads INNER JOIN euroadspris pris ON pris.cpid = ads.cpid"; $query = mysql_query($sql) or die(mysql_error()); while($result = mysql_fetch_assoc($query)){ echo $result['id'].'-->'.$result['pris']; }
18. december 2008 - 23:17
#19
Men du er nød til strukturere dine tabeller bedre. Som det er der, giver det ingen mening. Dit pid i euroads bør pege på id i euroadspris. I stedet for pid, så kald det FK_euroadspris_ID, så ved man det er en "Foreign Key" i en anden tabel.
18. december 2008 - 23:28
#20
Haha, den database struktur er god humor. Jeg foreslår du læser lidt op på database relationer istedet. Nu er der jo alligevel juleferie og tid til det.. :o)
18. december 2008 - 23:32
#21
Hov, den var nu til et andet spørgsaal, men den er nu alligevel passende :D
01. januar 2009 - 22:01
#22
Det her virkede fint. $sql = "SELECT * FROM euroads ads INNER JOIN euroadspris pris ON pris.cpid = ads.cpid"; $query = mysql_query($sql) or die(mysql_error()); while($result = mysql_fetch_assoc($query)){ echo $result['id'].'-->'.$result['pris']; } ---------------- Et lille ekstra spørgsmål. Hvordan kan jeg tælle hvor mange gange et tal er i min tabel i min database? Håber i forstår :)
01. januar 2009 - 22:22
#23
brug COUNT()
01. januar 2009 - 22:28
#24
HVordan tæller jeg f.eks hvor mange gange der står 10 i række tal i tabelen test?
01. januar 2009 - 22:39
#25
SELECT COUNT(tal) FROM test WHERE tal = 10
01. januar 2009 - 23:02
#26
Oka :) En aller sideste ting inden du får dine point ;) Hvad skal jeg så skrive for og kunne bruge det tal den kommer frem til. Hvis vi siger at der står 10 5 gange. Så for og kunne bruge 5 andre steder, hvad skal jeg så skrive?
01. januar 2009 - 23:25
#27
SELECT COUNT(tal) as antal FROM test WHERE tal = 10 så ligger værdien i antal
01. januar 2009 - 23:42
#28
så skal jeg bare skrive $antal?
01. januar 2009 - 23:47
#29
$result['antal'] eller hvad du nu har kaldt variablen.
01. januar 2009 - 23:52
#30
Okay. mange tak for hjælpen :)
Vi tilbyder markedets bedste kurser inden for webudvikling