Avatar billede tobrukDk Novice
25. marts 2012 - 21:42 Der er 13 kommentarer og
1 løsning

INNER JOIN fra brugere table over til blog table

Hej


Det er sådan at jeg skal have lavet INNER JOIN mellem brugere og blog_bruger

Det er sådan at jeg skal have lavet sådan at bruger kan opret blog indlæg og det skal være sådan at du kan kun skrive og ret og slet i dem som de SELV har lavet mv.. :) jeg håber virkelig du nogle ide til mig eller kan hjælp mig videre her fra hvor jeg sidder fast omkring det her som jeg er i gang med lige pt nu og her :)



CREATE TABLE IF NOT EXISTS `blog_bruger` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `tekst` longtext NOT NULL,
  `bruger_id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
)

____________________________________



CREATE TABLE IF NOT EXISTS `brugere` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `rank` tinyint(2) NOT NULL,
  `email` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `brugere_opret` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `djnavn` varchar(255) NOT NULL,
  `profilbillede` varchar(255) NOT NULL,
  `profiltekst` longtext NOT NULL,
  `facebook` varchar(255) NOT NULL,
  `pris` int(10) NOT NULL,
  `booking` varchar(255) NOT NULL,
  `hemmelig` varchar(255) NOT NULL,
  `club` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`)
)


det som problem er at jeg er utrolig dårlig til at lave inner join og jeg har ikke helt forstår det endnu hvordan det virker helt :)

det som jeg havde tænkt mig det var at bruger_id gik hen til brugere id og hente den sådan at den vist hvorfor en bruger der havde lavet den her blog.

det er lige pt den mulig som jeg kan se op i hovedet på mig selv. :) jeg er gerne åben for hvis du har et andet forslag til mig hvordan jeg så gør det eller har lign :)
Avatar billede Slettet bruger
25. marts 2012 - 22:23 #1
Som udgangspunkt kan du bruge:
SELECT *
FROM brugere a
INNER JOIN blog_bruger b ON b.bruger_id = a.id
WHERE ...
Erstat * med de kolonner du har brug for (og hvis der er to kolonner med samme navn kan du give den ene et andet navn i dit select statement). Du kan også lave det som et view i din database. Så ser det ud som om du laver et query på en enkelt tabel.
http://dev.mysql.com/doc/refman/5.5/en/create-view.html

Har du husket at lave en foreign key mellem brugere.id og blog_bruger.bruger_id? :)
Avatar billede Broxigar Praktikant
25. marts 2012 - 22:25 #2
Hej Tobruk,

Det er egentlig rimelig simpelt.

SELECT * FROM blog_bruger INNER JOIN brugere ON blog_bruger.bruger_id = brugere.id WHERE ........

Så slår den alle rows hvor brugere.id er lig blog_bruger.brugerid sammen til nye rækker.

For flere guides til simple SQL funktioner vil jeg henvise til http://www.w3schools.com/sql/


Til INNER JOIN: http://www.w3schools.com/sql/sql_join_inner.asp
Avatar billede vagnk Juniormester
26. marts 2012 - 05:19 #3
Lad mig prøve at beskrive verbalt hvordan jeg ser det, så kan det måske blive til en guide, hvis jeg kan gøre det nogenlunde læsbart. Det ville være en hel del nemmere hvis man kunne gøre det med nogle enkelte figurer fra mængdelæren.

To tabeller skal joines - FROM T1, T2.
T1 ser jeg som den indre tabel og T2 er den ydre tabel. Det er som antydet nedenfor osse sådan MySQL ser det.

Hvis jeg laver INNER JOIN (som er synonym med bare JOIN) så tager jeg alle rækker i T1 og de rækker i T2 hvor joinbetingelsen er opfyldt.

Hvis jeg vil sikre mig at alle rækker fra T2 kommer med, kan jeg enten bytte om på rækkefølgen med FROM T2, T1 og lave en JOIN eller jeg kan bibeholde rækkefølgen af tabellerne og lave en OUTER JOIN.

Hvorfor nu alt dette mumbojumbo?

Når man SELECTer fra flere tabeller er det god skik at sætte den mindste tabel forrest. Derved hjælper man databasemotoren med at lave søgningen mere effektiv, idet den (så vidt muligt) indlæser hele den første tabel og konstruerer sin videre søgning udfra denne.

I de fleste tilfælde med < 10.000 recs taler vi om nanosekunder, men i en bank eller i stat- og kommuneregi har det stor betydning, hvordan man strikker sine queries.

Og så lige en vi alle kan teste og tænke over:
Jeg vil påstå at det i ALLE tilfælde er sådan at en INNER JOIN i virkeligheden er en query uden JOIN men med en betingelse som :

SELECT a, b, c FROM T1, T2 WHERE T1.id = T2.id
er præcis det samme som
SELECT a, b, c FROM T1 JOIN T2 ON T1.id = T2.id

MySQL statementet EXPLAIN er ikke så kendt, men kan give god indsigt i hvordan en databasemotor "tænker" http://dev.mysql.com/doc/refman/5.5/en/explain.html.
Avatar billede tobrukDk Novice
26. marts 2012 - 07:19 #4
Hej alle som jeg kan se lige nu ser det godt men jeg er på mobil lige nu. Men jeg kigger på det en gang i aften omkring om hvorfor noget jeg kan bruge..  men det er lige pt svært når jeg er på mobil da .;) håber det er Iorden for jer alle sammen ;) skriver videre i aften
Avatar billede tobrukDk Novice
26. marts 2012 - 19:31 #5
#3 du gøre mig lidt mere klog :) og jeg tror at jeg tag JOIN hvis det er klart bedre og jeg er fri for at lave det der som du siger :)

#1 Det ved jeg godt omkring det der med navn og det har jeg prøve før :)

#2 jeg har ikke helt forstår det endnu det er derfor jeg spørger nogle her ind så kan jeg lærer det på en måde så jeg kan forstår det :D

er kommet frem til min problem som er ;


SELECT * FROM `brugere` JOIN blog_bruger ON brugere.id = blog_bruger.bruger_id WHERE = 41



Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\ny\admin_blog.php on line 27


<?php
                $result = mysql_query("SELECT * FROM `brugere` JOIN blog_bruger ON brugere.id = blog_bruger.bruger_id WHERE = 41");
                while($row = mysql_fetch_array($result))
                {
            ?>
                    <div id="infomationboxindhold">
                        <ul>
                            <li><a href="#?id=<?php echo $row["id"];?>">Ret i tekst</a></li> -
                            <li><a href="#?id=<?php echo $row["id"];?>">Slet</a></li> -
                            <li><a href="#?id=<?php echo $row["id"];?>">Blocker</a></li>
                        </ul>
                    </div>
            <?php
            }
            ?>
Avatar billede tobrukDk Novice
26. marts 2012 - 21:35 #6

SELECT * FROM `brugere` JOIN blog_bruger ON brugere.id = blog_bruger.bruger_id WHERE blog_id = 41


men så viser den ingen ting :( jeg skal have tekst frem for blog og title .. hmm
Avatar billede tobrukDk Novice
26. marts 2012 - 21:36 #7

SELECT * FROM `brugere` JOIN blog_bruger ON brugere.id = blog_bruger.bruger_id WHERE blog_id = 41


har problem med få tekst og overskifte frem på siden :)
Avatar billede tobrukDk Novice
26. marts 2012 - 21:39 #8
ved godt hvorfor det var fordi der ingen 41 var men der kun var "1"
Avatar billede tobrukDk Novice
26. marts 2012 - 21:54 #9
Nu skal jeg bare gør sådan at det er kun brugers egen blog indlæg han for vist på siden.. hvordan skal jeg gør det ?
Avatar billede vagnk Juniormester
27. marts 2012 - 09:46 #10
Kære tobrukDK
Jeg er som sædvanlig i dine tråde lidt ude at skide med hvad du egentlig mener. Du skriver meget ustruktureret.

Din query med SELECT * FROM `brugere` JOIN blog_bruger ON brugere.id = blog_bruger.bruger_id WHERE blog_id = 41 siger på dansk at ingen der har skrevet et indlæg med blog_id 41, men du fortæller at der findes et indlæg med blog_id=1. I det indlæg må der være en bruger_id, således at du får alt frem fra tabellen brugere (navn osv.). Du selecter ingen felter fra blog_bruger, så derfor får du intet at vide om indlægget med blog_id=1.

I virkeligheden siger din query "Giv mig alle de brugere der har skrevet mindst et indlæg". Hvis du skal have noget ud om de enkelte indlæg skal  din query værer noget i retning af: "Giv mig alle brugere OG DERES INDLÆG hvis de har skrevet noget".
Noget i retning af
SELECT brugere.*, blog_bruger.* FROM `brugere` T1 JOIN blog_bruger ON brugere.id = blog_bruger.bruger_id

´
Avatar billede tobrukDk Novice
27. marts 2012 - 18:06 #11
altså jeg har fået klart problem :)

Nu skal jeg bare klare gøre sådan at bruger kan skrive og så vil vide hvorfor et id brugere har :)

det er super lækkert at du forklare mig :)
Avatar billede vagnk Juniormester
28. marts 2012 - 09:25 #12
Nu skal jeg bare gør sådan at det er kun brugers egen blog indlæg han for vist på siden.. hvordan skal jeg gør det ?

Undskyld hvis jeg har misforstået noget, men hvad er det så du spørger om? Er vi ude i et helt nyt spørgsmål som burde komme i sin egen selvstændige tråd?

Hvis tråden er færdig bør du uddele point. Broxigar #2 har lagt et svar.
Avatar billede tobrukDk Novice
28. marts 2012 - 12:44 #13
Ja okay jeg giver ham dem :D
Avatar billede tobrukDk Novice
28. marts 2012 - 12:44 #14
Skriver hvis det ikke er okay :D
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