Avatar billede mpless Nybegynder
13. september 2005 - 00:36 Der er 10 kommentarer og
1 løsning

Selecte kategori titel fra kategori id

Query´en ser sådan ud. Jeg skal naturligvis bruge catagory_titel i tt_products_cat tabellen til "order by" i stedet for "category" i tt_products som er et id.
Men hvordan er det nu? Jeg har totalt glemt det... :)

SELECT * FROM tt_products WHERE 1=1 AND (inStock<>0) AND highlight=1 AND tt_products.deleted=0 AND tt_products.hidden=0
ORDER BY category, title ASC


//Pless
Avatar billede barklund Nybegynder
13. september 2005 - 01:33 #1
Så inner join'er du bare som:

SELECT * FROM tt_products INNER JOIN tt_products_cat WHERE tt_products.category = tt_products_cat.cid WHERE 1=1 AND (inStock<>0) AND highlight=1 AND tt_products.deleted=0 AND tt_products.hidden=0 ORDER BY tt_products_cat.category_title, tt_products.title ASC

Agtigt :)

--
Morten Barklund
Avatar billede kjulius Novice
13. september 2005 - 13:13 #2
Du kan da ikke have to WHERE clauses, mon ikke den ene skulle have været en ON:

SELECT * FROM tt_products INNER JOIN tt_products_cat ON tt_products.category = tt_products_cat.cid WHERE 1=1 AND (inStock<>0) AND highlight=1 AND tt_products.deleted=0 AND tt_products.hidden=0 ORDER BY tt_products_cat.category_title, tt_products.title ASC
Avatar billede barklund Nybegynder
13. september 2005 - 13:17 #3
Tihifnis, jo - selvfølgelig :)
Avatar billede kjulius Novice
13. september 2005 - 13:18 #4
Jeg undrer mig over betingelsen WHERE 1=1; den vil jo altid være sand og kan derfor udelades.
Avatar billede barklund Nybegynder
13. september 2005 - 22:08 #5
Tark for points :)
Avatar billede mpless Nybegynder
13. september 2005 - 23:34 #6
Hvorfor "erstatter" den værdien af tt_products.title med værdien fra tt_products_cat.title???
Avatar billede barklund Nybegynder
13. september 2005 - 23:38 #7
Fordi du ikke specifikt siger, hvilke attributter, du vil have - hvilket er lidt pænere. Så skal mysql heller ikke gætte sig til, hvilken af de to title-attributter, som du vil have:

SELECT
    tt_products.title,
    tt_products.product_id,
    ...
FROM
    tt_products
INNER JOIN
    tt_products_cat ON
        tt_products.category = tt_products_cat.cid
WHERE
    1=1 AND
    (inStock<>0) AND
    highlight=1 AND
    tt_products.deleted=0 AND
    tt_products.hidden=0
ORDER BY
    tt_products_cat.category_title,
    tt_products.title ASC

Og se hvor overskueligt, det pludselig bliver :)

--
Morten Barklund
Avatar billede mpless Nybegynder
13. september 2005 - 23:57 #8
Den sorterer sgu stadig forkert .... mystisk:

SELECT tt_products.* FROM tt_products INNER JOIN tt_products_cat ON tt_products.category = tt_products_cat.uid WHERE tt_products.pid IN (79,81,82,83,85,86,87,88,89,102,104,105,106,107,108,116,117,118,150) AND 1=1 AND (inStock<>0) AND highlight=1 AND tt_products.deleted=0 AND tt_products.hidden=0 ORDER BY tt_products_cat.title ASC

Hvis jeg printer en række ud fra resultatet er kategori titlen heller ikke med???

Array
(
    [uid] => 33
    [pid] => 118
    [tstamp] => 1126428243
    [hidden] => 0
    [starttime] => 0
    [endtime] => 0
    [title] => Alufolie 250m/12cm/14my
    [note] =>
    [price] => 129.00
    [price2] => 0.00
    [image] => 178000.jpg
    [www] =>
    [itemnumber] => 178000
    [category] => 57
    [inStock] => -1
    [deleted] => 0
    [ordered] => 0
    [fe_group] => 0
    [tax] => 0
    [weight] => 0.00
    [bulkily] => 0
    [offer] => 0
    [highlight] => 1
    [directcost] => 0.00
    [color] =>
    [size] =>
    [special_preparation] => 0
    [gradings] =>
    [subtitle] =>
    [sorting] => 0
)
Avatar billede barklund Nybegynder
14. september 2005 - 00:48 #9
Nej, du har jo valgt ikke at have kategori-titlen med. Hvis du vil have kategori-titlen printet, så skal du inkludere den i din SELECT liste. Og skal du kun sortere efter den, så er det ikke nødvendigt at have den i din SELECT liste. Men skal du sortere efter kategoriens navn eller produktets navn? Og hvad sker? Og hvad burde ske?
Avatar billede mpless Nybegynder
14. september 2005 - 09:02 #10
Skal jeg ikke oprette et nyt spørgsmål? Jeg har jo fået point og kode der virker af dig ..
Resten kan jo tilskrives at det er i TYPO3 det foregår...

MEN
Jeg troede egenligt at når jeg inner joinede kom der en række mere ud med katagori titlen...
Array
(
    [uid] => 33
    [pid] => 118
    [tstamp] => 1126428243
    [hidden] => 0
    [starttime] => 0
    [endtime] => 0
    [title] => Alufolie
    ...
    ...
    [title] => KAT_TITLE
Avatar billede barklund Nybegynder
14. september 2005 - 12:11 #11
Du kan jo ikke have to felter, der begge hedder title :)

$foo["title"] = "Hej";
$foo["title"] = "Farvel";

Kun den sidste overlever. Men du kan sagtens trække kategorititlen ud - du er bare nødt til at kalde den noget andet:

SELECT tt_products.*, tt_products_kat.title AS category_title FROM tt_products INNER JOIN tt_products_cat ON tt_products.category = tt_products_cat.uid WHERE tt_products.pid IN (79,81,82,83,85,86,87,88,89,102,104,105,106,107,108,116,117,118,150) AND 1=1 AND (inStock<>0) AND highlight=1 AND tt_products.deleted=0 AND tt_products.hidden=0 ORDER BY tt_products_cat.title ASC

Så hedder den $row['category_title'] og så kan du fint bruge den :)

--
Morten Barklund
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