Thanks Jim, The position is what I wanted to use to control the display order of the images. So yes, which should be first, second, third. Items can have more than one image. If you remove name='White' from your query, you'll see what I mean.
I didn't want to rely on something like position=1, but instead a general "priority" where higher numbers are displayed first (or ascending where lower numbers are first, but then Null becomes a problem which comes before any number). Your example definitely sparked some new simpler thoughts though. Like whether I could make it work where I just specify an image as "featured". James On Wed, Nov 10, 2010 at 4:03 PM, Jim Morris <jmor...@bearriver.com> wrote: > If you would explain why/how the position value is significant that > might help. > > I fixed your pseudo SQL to run in SQLite Manager and I don't understand > from the > sample data what your trying to do. There is only one image per item. > Do you have multiple images per item and only want to return the first? > > A query like the following seem to yield reasonable results: > SELECT products.name, items.id,images.filename, images.position > FROM products > INNER JOIN items ON items.product_id = products.id > LEFT JOIN images ON images.item_id = items.id > WHERE items.name='White' > ORDER BY products.name ASC, images.position ASC > ; > > The cleaned up code is: > > CREATE TABLE products (id, category_id, name, description); > CREATE TABLE items (id, product_id, part_number, name, price, buyable); > CREATE TABLE images (id, item_id, filename, position); > > INSERT INTO products (id, category_id, name ) VALUES (1, 1, 'SQLite > T-Shirt'); > INSERT INTO products (id, category_id, name ) VALUES (2, 1, 'SQLite Long > Sleeved Shirt'); > INSERT INTO items (id, product_id, name) VALUES ('SQLT-WHT', 1, 'White'); > INSERT INTO items (id, product_id, name) VALUES ('SQLT-BLK', 1, 'Black'); > INSERT INTO items (id, product_id, name) VALUES ('SQLL-WHT', 2, 'White'); > INSERT INTO items (id, product_id, name) VALUES ('SQLL-BLK', 2, 'Black'); > INSERT INTO items (id, product_id, name) VALUES ('SQLL-BLU', 2, 'Blue'); > INSERT INTO images (item_id, filename, position) VALUES > ('SQLT-WHT','sqlt-white.jpg', 2); > INSERT INTO images (item_id, filename, position) VALUES > ('SQLT-BLK','sqlt-black.jpg', 1); > INSERT INTO images (item_id, filename, position) VALUES > ('SQLL-WHT','sqll-white.jpg', 2); > INSERT INTO images (item_id, filename, position) VALUES > ('SQLL-BLK','sqll-black.jpg', 1); > > > On 11/10/2010 2:47 PM, James wrote: >> This will only display products which have items with images. I think >> I'm going to sit back and see if there's a simpler way to achieve what >> I'm trying to do. Maybe I'm going about this the wrong way, or I need >> to make some compromises. >> >> Thanks >> >> On Wed, Nov 10, 2010 at 3:01 PM, Igor Tandetnik<itandet...@mvps.org> wrote: >>> select name, filename from products p, images im >>> where im.item_id = ( >>> select im2.item_id from items left join images im2 on (items.id = >>> im2.item_id) >>> where items.product_id = p.id and items.buyable >>> order by position desc limit 1) >>> order by name; >>> >>> -- >>> Igor Tandetnik >>> >>> >>> _______________________________________________ >>> sqlite-users mailing list >>> sqlite-users@sqlite.org >>> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users >>> >> _______________________________________________ >> sqlite-users mailing list >> sqlite-users@sqlite.org >> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users >> > _______________________________________________ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users