Avatar billede benjaboy Nybegynder
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
Avatar billede fant0mas Nybegynder
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
Avatar billede benjaboy Nybegynder
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
Avatar billede fant0mas Nybegynder
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
Avatar billede benjaboy Nybegynder
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
Avatar billede fant0mas Nybegynder
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'];
}
Avatar billede benjaboy Nybegynder
18. december 2008 - 10:26 #6
Hmm. Det virker ikke.

Burde den ikke udskrive noget?
Avatar billede fant0mas Nybegynder
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
Avatar billede benjaboy Nybegynder
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
Avatar billede fant0mas Nybegynder
18. december 2008 - 10:51 #9
dINNER

der skal vist være et mellemrum efter d
Avatar billede benjaboy Nybegynder
18. december 2008 - 10:55 #10
Hvordan siger du så den samlede kode skal se ud ?
Avatar billede fant0mas Nybegynder
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'];
}
Avatar billede benjaboy Nybegynder
18. december 2008 - 11:05 #12
ny fejl:

Could not connect: Lost connection to MySQL server at 'reading authorization packet', system error: 0
Avatar billede fant0mas Nybegynder
18. december 2008 - 11:48 #13
Du må vist kigge på din mysql_connect()
Avatar billede benjaboy Nybegynder
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'];
}

?>
Avatar billede fant0mas Nybegynder
18. december 2008 - 17:57 #15
Kan du ikke smide et sql dump af tabeller og indhold.
Det gøres i phpMyAdmin under eksport.
Avatar billede benjaboy Nybegynder
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');
Avatar billede benjaboy Nybegynder
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'];
}

?>
Avatar billede fant0mas Nybegynder
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'];
}
Avatar billede fant0mas Nybegynder
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.
Avatar billede fant0mas Nybegynder
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)
Avatar billede fant0mas Nybegynder
18. december 2008 - 23:32 #21
Hov, den var nu til et andet spørgsaal, men den er nu alligevel passende :D
Avatar billede benjaboy Nybegynder
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 :)
Avatar billede fant0mas Nybegynder
01. januar 2009 - 22:22 #23
brug COUNT()
Avatar billede benjaboy Nybegynder
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?
Avatar billede fant0mas Nybegynder
01. januar 2009 - 22:39 #25
SELECT COUNT(tal)
FROM test
WHERE tal = 10
Avatar billede benjaboy Nybegynder
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?
Avatar billede fant0mas Nybegynder
01. januar 2009 - 23:25 #27
SELECT COUNT(tal) as antal
FROM test
WHERE tal = 10

så ligger værdien i antal
Avatar billede benjaboy Nybegynder
01. januar 2009 - 23:42 #28
så skal jeg bare skrive $antal?
Avatar billede fant0mas Nybegynder
01. januar 2009 - 23:47 #29
$result['antal'] eller hvad du nu har kaldt variablen.
Avatar billede benjaboy Nybegynder
01. januar 2009 - 23:52 #30
Okay. mange tak for hjælpen :)
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