webForumDet fria alternativet

mysql join ?

11 svar · 534 visningar · startad av Fuel

FuelMedlem sedan okt. 20001 325 inlägg
#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

PeddaMedlem sedan juni 20004 880 inlägg
#2

Flyttas från PHP

The_HulkMedlem sedan juni 20031 937 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
FuelMedlem sedan okt. 20001 325 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 ?

@ndersMedlem sedan juni 200026 914 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.

FuelMedlem sedan okt. 20001 325 inlägg
#6

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

@ndersMedlem sedan juni 200026 914 inlägg
#7

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

FuelMedlem sedan okt. 20001 325 inlägg
#8

Yes...

@ndersMedlem sedan juni 200026 914 inlägg
#9

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

FuelMedlem sedan okt. 20001 325 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 />";

}
@ndersMedlem sedan juni 200026 914 inlägg
#11
            users AS users2 
            [b]ON[/b]
            requests.fillerid = users2.id
FuelMedlem sedan okt. 20001 325 inlägg
#12

bra.. :) tack!

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

Genererad på 369 ms · cache AV · v20260730165559-full.f96bc7eb