Avatar billede dkklein Nybegynder
24. februar 2002 - 09:34 Der er 10 kommentarer og
1 løsning

JOIN

Jeg har følgende lille script som viser antal gange en url er blevet aktiveret. Jeg vil gerne udvidde det med en join til en tabel hvor jeg har beskrivelsen af url'en.

$conn = mysql_connect($db_Hostname, $db_UserName, $db_Password);
mysql_select_db($db_Database, $conn);
$foresp = mysql_query("SELECT url, COUNT(*) AS no FROM redirects GROUP BY url ORDER BY no DESC");
?><table>
<tr>
<td>Hits
</td>
<td>URL
</td>
</tr> <?
while($data = mysql_fetch_row($foresp)){
echo "<tr><td>$data[1]</td><td><a href=\"redir.php?from=linkstats&redirurl=$data[0]\" target=\"_blank\">$data[0]</a></tr>";
}
?>
</table>


Lige så snart jeg prøver at tilføje en JOIN til min anden tabel links som har felterne url og description hvor jeg vil knytte tabllerne sammen med feltet url så fejler mit script i linien med mysql_fetch_rows med følgende:

Warning: Supplied argument is not a valid MySQL result resource in D:\web\testsc\linkstats2.php on line 15

Hvordan gør jeg dette. Jeg har kigget i manualen på mysql.com men det har ikke rigtigt givet mig noget svar.
Avatar billede repsac Nybegynder
24. februar 2002 - 09:39 #1
det er nok fordi du så ikke trækker noget ud af databasen... vær 100% sikker på at du får noget data ud.
Avatar billede dkklein Nybegynder
24. februar 2002 - 09:44 #2
Jeg er 100% sikker på at url i de 2 tabeller er ens og at en join vil give et resultat.

Kan det være forbi jeg vil COUNTE samtidig?
Avatar billede erikjacobsen Ekspert
24. februar 2002 - 09:48 #3
Hvad skriver du i SQL-sætningen?
Avatar billede dkklein Nybegynder
24. februar 2002 - 09:52 #4
Ok, nu er jeg kommet så vidt at følgende udført i phpmyadmin

select *, COUNT(*) AS no FROM redirects LEFT JOIN links ON redirects.url=links.url GROUP BY redirects.url ORDER BY no DESC

giver et resultat, men jeg får også listet de records hvor url ikke matcher i de 2 tabeller?
Avatar billede proaccess Nybegynder
24. februar 2002 - 09:55 #5
Prøv med noget i retning af: (det burde virke, men er ikke testet)

SELECT redirects.*, links.*, COUNT(redirects.*) AS no FROM redirects INNER JOIN links ON redirects.url=links.url GROUP BY redirects.url, links.text ORDER BY redirects.no DESC
Avatar billede proaccess Nybegynder
24. februar 2002 - 09:56 #6
Kort sagt:
LEFT JOIN tager alle fra A og dem fra B som passer...
INNER JOIN tager alle fra A, som har en tilsvarrende i B
Avatar billede dkklein Nybegynder
24. februar 2002 - 09:57 #7
Det hjælper søreme at skrive om tingene så falder det hele på plads efterhånden, jeg fik følgende til at virke:

select *, COUNT(*) AS no FROM redirects LEFT JOIN links ON redirects.url=links.url WHERE redirects.url=links.url GROUP BY redirects.url ORDER BY no DESC
Avatar billede proaccess Nybegynder
24. februar 2002 - 09:58 #8
Du bruger dit JOIN forkert!

select *, COUNT(*) AS no FROM redirects INNER JOIN links ON redirects.url=links.url GROUP BY redirects.url ORDER BY no DESC
Avatar billede dkklein Nybegynder
24. februar 2002 - 10:00 #9
Hvad er forskellen på din sql og min som jeg lige har set virker?
Avatar billede proaccess Nybegynder
24. februar 2002 - 10:05 #10
Du "samler" dine tabeller 2 steder, både i JOIN og i WHERE, det kan gøres nemmere ved kun at gøre det i JOIN, som jeg har skitseret.

Du tager først ALLE fra redirects, og krydser med dem som kan komme fra links. Derefter frasorterer du dem fra redirects, som ikke er i links.

Jeg tager kun dem fra redirects, som også er i links.
Avatar billede dkklein Nybegynder
24. februar 2002 - 10:18 #11
Ok. Tak.
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