Avatar billede the-exterminator Nybegynder
14. februar 2012 - 20:12 Der er 25 kommentarer og
1 løsning

2 tabeller med link

Jeg har dette for at trække tabellen ud med dem der er "JA" i
$query = mysql_query("SELECT * FROM info WHERE cheat LIKE 'ja'");
$cheat = mysql_num_rows($query);
echo '<li class="tdRow">' . 'Der er: ' . $cheat . '  Games med Cheat ' . '</li>';


Men får at få et link, så den viser de spil der er "JA" har jeg lidt problemmer med, da den først trækker ALLE ud med denne
    $result = mysql_query("select gameid, title,concat(`day`, '-' ,`month`, '-' ,`year`) as published from gameinfo order by title");

gameinfo og info ligger i 2 forskellige tabeller i min sqldatabase, og når den trækker linket ud, skulle den meget gerne få $result ud på siden.

Ligemeget hvad jeg har prøvet får jeg fejl i denne linje :
while ($row = mysql_fetch_array($result)) {
14. februar 2012 - 20:59 #1
Hvordan ved du, og databasen, hvilke rækker i tabellen info der svarer til hvilke rækker i tabellen gameinfo?  Har info et felt gameid?  Hvis ja, så kan du lave dit andet query således:

$result = mysql_query("SELECT gameid, title, concat(`day`, '-' ,`month`, '-' ,`year`) as published FROM info JOIN gameinfo ON info.gameid = gameinfo.gameid WHERE info.cheat LIKE 'ja' ORDER BY gameinfo.title");
14. februar 2012 - 21:04 #2
Men jeg kan ikke dy mig for at være pædagogisk.  Det ser ud som om du i gameid har tre felter med tekststrenge for day, month, og year.  Hvis det er tilfældet ville det formodenligt være nemmere at erstatte disse med et enkelt felt med datatype DATE.

Og et spørgsmål? Hvilke felter har du i info andet end cheat og, måske, gameid?  Hvis der er en en-til-en relation mellem de to tabeller ville det synes overflødigt med de to tabeller.  Cheat kolonnen kunne sidde i gameinfo tabellen sammen med title og dato.
Avatar billede the-exterminator Nybegynder
15. februar 2012 - 16:59 #3
Hej Christian_Belgien.
Der er en gameid i min info tabel.
Det med datoen, har noget at gøre med at den måde det er delt op på fra den side jeg tar mine oplysninger, fra deres side og ned i min database, derfor den måde.

Men hvis du kan lave dette om til et link :
$query = mysql_query("SELECT * FROM info WHERE cheat LIKE 'ja'");
$cheat = mysql_num_rows($query);
echo '<li class="tdRow">' . 'Der er: ' . $cheat . '  Games med Cheat ' . '</li>';


Så kan jeg prøve den du har skrevet.
Avatar billede the-exterminator Nybegynder
15. februar 2012 - 18:12 #4
Sorry, det er denne linje der skal laves link på jo :
echo '<li class="tdRow">' . 'Der er: ' . $cheat . '  Games med Cheat ' . '</li>';
Avatar billede the-exterminator Nybegynder
15. februar 2012 - 18:19 #5
Christian_Belgien

Når jeg sætte denne ind

$result = mysql_query("SELECT gameid, title, concat(`day`, '-' ,`month`, '-' ,`year`) as published FROM info JOIN gameinfo ON info.gameid = gameinfo.gameid WHERE info.cheat LIKE 'ja' ORDER BY gameinfo.title");

du har lavet, får jeg denne fejl:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/www/domain/index.php on line 84

linje 84 er dette : while ($row = mysql_fetch_array($result)) {
Avatar billede the-exterminator Nybegynder
15. februar 2012 - 18:30 #6
Christian_Belgien

Prøver lige igen, for kan se at endten har jeg beskrivet det forkert, eller osse har du misforstået mit spørgsmål.

Jeg skal have lavet et link til denne :

echo '<li class="tdRow">' . 'Der er: ' . $cheat . '  Games med Cheat ' . '</li>';

men mit $result skal indholde disse 3 tabeller fra info.
cheat, fanart, trilers.
Der er gameid i info tabellen.

Men når jeg trykker på linket der skal laves, skal den tage alle de spil i cheat der har Ja, og det samme gælder for fanart og trilers. så min $result skal udbygges så den ved at når jeg trykker på linket skal den liste dem, ligesom når den fra start lister alle min spil med :

$result = mysql_query("select gameid, title,concat(`day`, '-' ,`month`, '-' ,`year`) as published from gameinfo order by title");

Lige nu når man går ind på siden med index.php lister den alle spil, og i min menu til højre hvor linkne skal være, skal den så liste cheat, fanart og trilers. Men stadig på samme måde som når den lister alle spil fra start med $result. ved ikke om du forstår hvad jeg mener.
16. februar 2012 - 08:18 #7
Nej, jeg forstår ikke rigtigt hvad du fortæller.  Jeg burde nok stoppe her og ikke spilde mere af din tid. 

Jeg troede fra dit oprindelige spørgsmål, at du ville have trukket oplysninger ud for de spil der i mysql tabellen havde JA i feltet cheat.  Og jeg troede problemet var, at du med den query du viser får alle spil, ikke kun de med JA i cheat.  Du får naturligvis alle games fordi du i queryen $result = mysql_query("select gameid, ....) spørger efter alle spil.  Derfor foreslog jeg i #1 en join query, hvor du kun spørger efter spil med JA i cheat.

Fra #3 og #4 fik jeg så det indtryk, at problemet var et helt andet, og det så jeg da jeg var på vej ud af døren.  Men i #5 vender du tilbage og har afprøvet min foreslåede query, men du får den fejlmelding du viser. 

Fejlmeldingen du beskriver skyldes sandsynligvis, at du ikke får noget resultat ud af queryen.  Hvis queryen giver resultat, så kommer resultatet til at stå i $result.  Hvis queryen ikke giver noget resultat, så kommer der tl at stå FALSE i $result, og når du indsætter FALSE i mysql_fetch_array får du den fejlmelding du viser.

I dit oprindelige spørgsmål snakkede du også om en fejl, men du undlod desværre at fortælle hvilken fejlmelding du fik.  Var det den samme fejlmelding?  (Så kunne du godt have fortalt det.)  I så fald er der enten noget galt med tabellen gameinfo eller med de felter du søger på.  Så for at komme videre med noget som helst skal vi først have fundet ud af hvad det er.

Prøv at køre dette:

$result = mysql_query("SELECT * FROM gameinfo")or die(mysql_error());
$number = mysql_num_rows($result);
echo $number;

Hvis du får en fejlmelding skrevet ud, så vis fejlmeldingen her.  Hvis du for $number for 0, så består tabellen gameinfo, men den er tom.  Der er ingen games i den.  (Du er jo klar over, at hvis tabellen i virkeligheden hedder Gameinfo eller gamesinfo, så giver en forespørgsel på gameinfo ingenting.)  Hvis du i $number får et tal, og det tal svarer til de antal games du forventer skulle være i tabellen gameinfo, så ligger problemet ikke i tabellen selv.

Så vil næste skridt være at prøve det samme med den fulde query:

$result = mysql_query("select gameid, title,concat(`day`, '-' ,`month`, '-' ,`year`) as published from gameinfo order by title")or die(mysql_error());
$number = mysql_num_rows($result);
echo $number;

Hvis det giver fejlmelding eller $number er 0, så er der noget galt med de felter du bruger (for eksempel at det skal være titel og ikke title).  Men fortæl hvad der sker.
Avatar billede the-exterminator Nybegynder
16. februar 2012 - 08:34 #8
Ønsker ikke du stopper her, vil meget gerne have din hjælp. Men måske det er nemmere hvis du får url'en så du kan se hvad jeg mener. ???

Den du skriver viser hvor mange spil der er.

$result = mysql_query("SELECT * FROM gameinfo")or die(mysql_error());
$number = mysql_num_rows($result);
echo $number;

den fulde query laver heller ikke fejl.

$result = mysql_query("select gameid, title,concat(`day`, '-' ,`month`, '-' ,`year`) as published from gameinfo order by title")or die(mysql_error());
$number = mysql_num_rows($result);
echo $number;

Er det nemmere hvis jeg skriver vilken tabeller databasen indholder så. ???
Avatar billede the-exterminator Nybegynder
16. februar 2012 - 08:37 #9
Avatar billede the-exterminator Nybegynder
16. februar 2012 - 08:43 #10
Christian_Belgien
Håber du kan forstå det nu, ellers må jeg finde en anden måde at forklare mig på, håber det hjælper med linket, så du kan se det. :)
Hvis du kigger på siden, så lister den ALLE spil med det samme.

Det jeg gerne vil have er at når linket er lavet i menuen til højre, så skal den liste fx. ALLE spil med cheat.

Men problemmet er at den for at kalde lige nu, bruger den :
$result = mysql_query("SELECT gameid, title, concat(`day`, '-' ,`month`, '-' ,`year`) as published FROM info JOIN gameinfo ON info.gameid = gameinfo.gameid WHERE info.cheat LIKE 'ja' ORDER BY gameinfo.title");
for at kalde på tabellen gameinfo

for at linket vil virke når det er lavet, skal den så osse tage tabellen info da cheat ligger i den.

linket i højre skal så laves på denne linje fx. med cheat :
echo '<li class="tdRow">' . 'Der er: ' . $cheat . '  Games med Cheat ' . '</li>';
Avatar billede the-exterminator Nybegynder
16. februar 2012 - 08:45 #11
Det er seøvføglig denne her den kalder ud lige nu for at bruge gameinfo tabellen, og ikke den jeg skrev før. Sorry

$result = mysql_query("select gameid, title,concat(`day`, '-' ,`month`, '-' ,`year`) as published from gameinfo order by title");
16. februar 2012 - 10:05 #12
Siger du, at når du bruger denne query:

$result = mysql_query("select gameid, title,concat(`day`, '-' ,`month`, '-' ,`year`) as published from gameinfo order by title");

så får du spillene vist uden problemer, sådan som jeg kan se i dit link?  Ok, så langt så godt.

Men den query beder mysql om alle spillene i tabellen gameinfo, og det får du så.  Men du vil kun have de spil i gameinfo hvor der i info står JA i cheat.  Det er det der er problemet.  har jeg forstået det rigtigt?

For at få resultater der afhænger både af tabellen info og af tabellen gameinfo skal din query bruge begge tabeller med en JOIN. 

Du siger nu 'SELECT ... FROM gameinfo ...' 

Det skal være 'SELECT .... FROM info JOIN gameinfo ...' 

Det de to tabeller har fælles er feltet gameid, så du joiner på det felt: 
'SELECT ... FROM info JOIN gameinfo ON info.gameid = gameinfo.gameid ...' . 

Det er sådan den query jeg foreslår skal forstås.

Så hvis du bruger denne kode:

$result = mysql_query("SELECT gameid, title, concat(`day`, '-' ,`month`, '-' ,`year`) as published FROM info JOIN gameinfo ON info.gameid = gameinfo.gameid WHERE info.cheat LIKE 'ja' ORDER BY gameinfo.title");
while($row = mysql_fetch_array($result))
{
o.s.v.
}

får du så fejlmeldingen 'Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/www/domain/index.php on line 84'?


I så fald foreslår jeg at du går videre som begyndt i #7/#8:

Prøv

$result = mysql_query("SELECT gameid, title, concat(`day`, '-' ,`month`, '-' ,`year`) as published FROM info JOIN gameinfo ON info.gameid = gameinfo.gameid WHERE info.cheat LIKE 'ja' ORDER BY gameinfo.title") or die(mysql_error());
$number = mysql_num_rows($result);
echo $number;

og fortæl hvad du får.
Avatar billede the-exterminator Nybegynder
16. februar 2012 - 10:17 #13
Hvis jeg bruger denne :
$result = mysql_query("select gameid, title,concat(`day`, '-' ,`month`, '-' ,`year`) as published FROM info JOIN gameinfo ON info.gameid = gameinfo.gameid order by title");
Laver den fejl : Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/www/the-exterminator.dk/belgien/index.php on line 87
Linje 87 indholder : while ($row = mysql_fetch_array($result)) {

og samme fejl kommer med :
$result = mysql_query("SELECT gameid, title, concat(`day`, '-' ,`month`, '-' ,`year`) as published FROM info JOIN gameinfo ON info.gameid = gameinfo.gameid WHERE info.cheat LIKE 'ja' ORDER BY gameinfo.title") or die(mysql_error());
$number = mysql_num_rows($result);
echo $number;
Avatar billede the-exterminator Nybegynder
16. februar 2012 - 10:20 #14
Forsiden som den er nu, er iorden.
Men uden til højre, hvor du kan se "Der er: 121 Games med Cheat " i menuen, det er den der skal laves til link bagefter, så den så lister spilne med cheat.
Avatar billede the-exterminator Nybegynder
16. februar 2012 - 10:21 #15
Er der et sted hvor jeg kan smide index.php op, så du kan se den. ???
16. februar 2012 - 10:39 #16
Tilbage til #13 (for det er meningsløst at prøve at gå videre så længe queryen giver fejl):

du siger '..samme fejl kommer med:

$result = mysql_query("SELECT gameid, title, concat(`day`, '-' ,`month`, '-' ,`year`) as published FROM info JOIN gameinfo ON info.gameid = gameinfo.gameid WHERE info.cheat LIKE 'ja' ORDER BY gameinfo.title") or die(mysql_error());
$number = mysql_num_rows($result);
echo $number;

Jamen det var ikke min mening at du i den test skulle inkludere din while kode.  Det der er vigtigt er at vide hvad du får udskrevet for $number.  For at gøre det tydeligere kan du måske i stedet for 'echo $number' skrive 'echo "NUMBER ER $number";

Hvis $number er 0, så har vi den direkte årsag til fejlmeldingen at 'supplied argument is not a valid MySQL result, nemlig at join queryen ikke giver nogen resultater.  I så fald vil vi være i stand til at lede efter og finde ud af hvorfor og få det rettet.
Avatar billede the-exterminator Nybegynder
16. februar 2012 - 13:08 #17
Okay, hvis du kigger på siden, og kigger under "Der er: 121 Games med Cheat".
Så kan du se den skriver NUMBER ER men ikke noget tal
Avatar billede the-exterminator Nybegynder
16. februar 2012 - 13:20 #18
Men jeg bliber lidt forvirret nu.
for det er dette der skal laves om, så den henter info tabbellen
info tabel består af : gameid, cheat, fanart, trilers

$result = mysql_query("select gameid, title,concat(`day`, '-' ,`month`, '-' ,`year`) as published from gameinfo order by title");

det er så dette der skal laves om, så når man trykker på "Der er: 121 Games med Cheat" i menuen til højre, så lister den de spil der cheat til, den kode ser sådan ud :
$query = mysql_query("SELECT * FROM info WHERE cheat LIKE 'ja'");
$cheat = mysql_num_rows($query);
echo '<li class="tdRow">' . 'Der er: ' . $cheat . '  Games med Cheat ' . '</li>';
kan se jeg skrev det i #1
Avatar billede the-exterminator Nybegynder
16. februar 2012 - 16:48 #19
Køre jeg denne her :
$result = mysql_query("SELECT gameid, title, concat(`day`, '-' ,`month`, '-' ,`year`) as published FROM info JOIN gameinfo ON info.gameid = gameinfo.gameid WHERE info.cheat LIKE 'ja' ORDER BY gameinfo.title") or die(mysql_error());
$number = mysql_num_rows($result);
echo "NUMBER ER $number";


Skriver den bare sådan her på siden : Column 'gameid' in field list is ambiguous
16. februar 2012 - 17:41 #20
#17, så $number er blank.  Queryet giver ingen resultater.  Det er årsagen til fejlmeldingen at 'supplied argument is not a valid mysql resource..., fordi der kommer en FAIL i stedet for et antal spil.

Så hvorfor giver queryet ingen resultater?  Årsagen er vist skrevet i den fejlmelding du skrev i #19, Column 'gameid' in field list is ambiguous.  Jeg indser nu, at fordi der er to felter med navnet gameid er vi nødt til at fortælle mysql hvilken der ønskes.

Jeg retter SELECT gameid... til SELECT info.gameid...

Prøv at køre denne kode og fortæl mig hvad du får som NUMBER ER $number og om der kommer flere fejlmeldinger.  Hvis der kommer fejlmeldinger, så skriv dem ned ord til anden.  Hvis du havde givet mig fejlmeldingen i #17 noget før, så havde vi nu været længere fremme.

$result = mysql_query("SELECT info.gameid, title, concat(`day`, '-' ,`month`, '-' ,`year`) as published FROM info JOIN gameinfo ON info.gameid = gameinfo.gameid WHERE info.cheat LIKE 'ja' ORDER BY gameinfo.title") or die(mysql_error());
$number = mysql_num_rows($result);
echo "NUMBER ER $number";
Avatar billede the-exterminator Nybegynder
16. februar 2012 - 17:50 #21
Hmmm, skrev faktisk fejlen til dig i #5.

Men nu har jeg fået det til at virke med det her :

$result = mysql_query("SELECT gi.gameid, gi.title, concat(gi.day, '-' ,gi.month, '-' ,gi.year) as published ,i.* FROM gameinfo gi,info i where gi.gameid=i.gameid ORDER BY gi.title");

Så nu er det bare denne her jeg skal have lavet :

$query = mysql_query("SELECT * FROM info WHERE cheat LIKE 'ja'");
$cheat = mysql_num_rows($query);
echo '<li class="tdRow">' . 'Der er: ' . $cheat . '  Games med Cheat ' . '</li>';


Så når jeg trykker på linket, den så lister alle spilne med cheat.
16. februar 2012 - 18:20 #22
Du skrev i slutningen af #19:  "Skriver den bare sådan her på siden : Column 'gameid' in field list is ambiguous ".  Det var særdeles informativt, jeg forstod hvor problemet var.

Men du svarer ikke på #20.  Jeg går ud fra, at du ikke har prøvet kodeafsnittet.  Men vi snakker i øst og vest, og det bliver ikke til noget.  Jeg skal undlade at spilde mere af din tid, og også af hensyn til min egen tid må jeg stå af her. 

Held og lykke med dit problem.  Jeg håber du får indlæg fra andre der bedre kan hjælpe.  Hvis ikke, så husker du vel at lukke spørgsmålet igen (med points til dig selv hvis du ikke får andre indlæg.)
Avatar billede the-exterminator Nybegynder
16. februar 2012 - 18:24 #23
Christian_Belgien.
Grunden til jeg ikke prøvet din linje af, var at jeg fik linjen til at virke på den anden måde.

Så nu er det kun linket jeg skal have til at virke som beskrevet i #21.

Håber da du vil hjælpe med det, da du kan se på siden hvad jeg mener. Men hvis du ikke vil bruge mere til på det er det osse fair nok, men så takker jeg for din tid og hjælp. Men hvis du har en ide til linket, vil jeg da meget gerne høre det. :)
Avatar billede the-exterminator Nybegynder
16. februar 2012 - 18:25 #24
Fejlen i #19, fik jeg jo først da jeg prøvet den linje du skrev jeg skulle prøve, så kunne ikke skrive fejlen før der.
16. februar 2012 - 18:48 #25
Jeg står som sagt af.  Held og lykke.
Avatar billede the-exterminator Nybegynder
16. februar 2012 - 18:53 #26
Okay
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
Computerworld tilbyder specialiserede kurser i database-management

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