webForumDet fria alternativet

mysql join ?

Databaser & SQLur Databashanterare & SQL

11 svar · 534 visningar · startad av Fuel

Medlem sedan okt. 20001 285 inlägg
Frågan#1

Hej, har både dammat av mig själv och mysql joins, skulle behöva en del hjälp med en kodsnutt samt lite länkar till info.

Ex. har 3 tabeller. 1. rek 2. kat & 3. anv

I tabell 1(rek) sparas det mesta. Där plockar jag ut en rubrik, ett datum, ett kategori id & 2st användar id´n ( ett id skrev in datan & det andra id´t ändrade sedan )

så hur gör jag ?

SELECT
            rek.rubrik, rek.id, rek.skrev, rek.andrade, rek.kat, rek.datum,
            anv.id, anv.namn,
            kat.id, kat.name, kat.bild
            FROM
            rek
            LEFT JOIN
            anv
            ON
            rek.skrev = anv.id
            LEFT JOIN
            anv
            rek.andrade = anv.id
            LEFT JOIN
            kat
            ON
            rek.kat = kat.id
            ORDER BY rek.datum DESC

Det är det mesta som ska ut ur rek, kategori? id får man ju på anv. blir knivigare när jag vill ha namn på både han som skrev & han som ändrade på samma rad.

Alltså... typ...

ID | Kategori Namn | Rubrik | Datum | Han som skrev + hans id | Hans om ändrade + hans id
ID | Kategori Namn | Rubrik | Datum | Han som skrev + hans id | Hans om ändrade + hans id
ID | Kategori Namn | Rubrik | Datum | Han som skrev + hans id | Hans om ändrade + hans id
ID | Kategori Namn | Rubrik..... osv osv

Medlem sedan juni 20006 031 inlägg
#2

Flyttas från PHP

Medlem sedan juni 20031 837 inlägg
#3

du måste sätta ett alias på anv-tabellen om du använder den mer än en gång

 SELECT
            rek.rubrik, rek.id, rek.skrev, rek.andrade, rek.kat, rek.datum,
            a1.id, a1.namn,
            a2.id, a2.namn,
            kat.id, kat.name, kat.bild
            FROM
            rek
            LEFT JOIN
            anv AS a1
            ON
            rek.skrev = a1.id
            LEFT JOIN
            anv AS a2
            rek.andrade = a2.id
            LEFT JOIN
            kat
            ON
            rek.kat = kat.id
            ORDER BY rek.datum DESC
Medlem sedan okt. 20001 285 inlägg
#4

Hmm.. vad gör jag för fel ?

Error: 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 'requests.by = users2.id LEFT JOIN categories ' at line 14

$req_sql = "SELECT
            requests.headline, requests.id, requests.userid, requests.by, requests.text, requests.added, requests.cat, requests.hits, 
            users1.id, users1.username AS USR_NAME1, 
            users2.id, users2.username AS USR_NAME2, 
            categories.id AS CAT_ID, categories.name AS CAT_NAME, categories.image AS CAT_IMAGE 
            FROM 
            requests 
            LEFT JOIN 
            users AS users1 
            ON 
            requests.userid = users1.id 
            LEFT JOIN 
            users AS users2 
            requests.by = users2.id 
            LEFT JOIN 
            categories 
            ON 
            requests.cat = categories.id 
            ORDER BY requests.added DESC";

$get_req = mysql_query($req_sql) or die("Error: ".mysql_error()."");

Är det för att requests.by kan var tomt i vissa fall ?

Medlem sedan juni 200032 967 inlägg
#5

Är det för att requests.by kan var tomt i vissa fall ?

Nej, det har ju inte med syntaxen att göra. Däremot hittar jag inte stället i koden som felmeddelandet pekar på? requests.filledby = users2.id finns ju inte med i din SQL-fråga???

edit: jaha, där kom en redigering.

by är rätt fett reserverat. Byt namn.

Medlem sedan okt. 20001 285 inlägg
#6

:( still no go.. samma fel fortfarande, är jag rätt ute i syntaxen ändå ?

Medlem sedan juni 200032 967 inlägg
#7

Samma felmeddelande, trots att du bytt namn på fältet?

Medlem sedan okt. 20001 285 inlägg
#8

Yes...

Medlem sedan juni 200032 967 inlägg
#9

Ok, exakt hur ser felmeddelandet ut nu, och exakt hur ser SQL-frågan ut nu?

Medlem sedan okt. 20001 285 inlägg
#10

Så här...

Error: 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 'requests.filledby = users2.id LEFT JOIN categories ' at line 14

$req_sql = "SELECT
            requests.headline, requests.id, requests.userid, requests.fillerid, requests.description, requests.added, requests.cat, requests.hits, 
            users1.id, users1.username AS USR_NAME1, 
            users2.id, users2.username AS USR_NAME2, 
            categories.id AS CAT_ID, categories.name AS CAT_NAME, categories.image AS CAT_IMAGE 
            FROM 
            requests 
            LEFT JOIN 
            users AS users1 
            ON 
            requests.userid = users1.id 
            LEFT JOIN 
            users AS users2 
            requests.fillerid = users2.id 
            LEFT JOIN 
            categories 
            ON 
            requests.cat = categories.id 
            ORDER BY requests.added DESC";

$get_req = mysql_query($req_sql) or die("<div class='mysql-error'>Error: ".mysql_error()."</div>");
CREATE TABLE `requests` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `userid` int(10) unsigned NOT NULL default '0',
  `headline` varchar(225) default NULL,
  `description` text NOT NULL,
  `added` datetime NOT NULL default '0000-00-00 00:00:00',
  `hits` int(10) unsigned NOT NULL default '0',
  `cat` int(10) unsigned NOT NULL default '0',
  `fillerid` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `userid` (`userid`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `username` varchar(40) NOT NULL default '',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `username` (`username`),
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

CREATE TABLE `categories` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(30) NOT NULL default '',
  `image` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
while ($req = mysql_fetch_array($get_req))
{

    echo "<p>".$req['CAT_NAME']."</p>";
    echo "<p>".$req['headline']."</p>\n";
    echo "<p>".$req['USR_NAME1']."</p>\n";
    echo "<p>".$req['USR_NAME2']."</p>\n";
    echo "<hr />";

}
Medlem sedan juni 200032 967 inlägg
#11
            users AS users2 
            [b]ON[/b]
            requests.fillerid = users2.id
Medlem sedan okt. 20001 285 inlägg
#12

bra.. :) tack!

blev " requests.id AS REQ_ID " också för att få rätt id

143 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
141 ms — hämta tråd, inlägg och bilagor (db)