![]() |
|
Welcome to the Computer Webmaster Gaming Console Graphics Forum forums. You are currently viewing our boards as a guest which gives you limited access to view most discussions and access our other features. By joining our free community you will have access to post topics, communicate privately with other members (PM), respond to polls, upload content and access many other special features. Registration is fast, simple and absolutely free so please, join our community today! If you have any problems with the registration process or your account login, please contact contact us. |
| |||||||
| Database Database problems or need to ask a question? maybe something to do with sql injections or a database software question. Database topics cover MySQL, PostgreSQL, Oracle, SQL Server or anything else related to databases. |
![]() |
| | LinkBack | Thread Tools | Display Modes |
| | #1 | ||
| Hi -- I have three tables: one for authors, one for books, and a link table linking the author_id with the book_id. I want to list first each author and then their books, excluding authors that don't yet have books entered. I did this: // Only want to list authors that actually have books in the library $query1 = " SELECT DISTINCT author_id FROM source_author"; $author_ids = mysql_query($query1) or die ("Error in query: $query1 . " . mysql_error()); if (mysql_num_rows($author_ids) > 0) { while(list($a_id) = mysql_fetch_row($author_ids)) { // Get list of authors' names and dates $query2 = " SELECT * FROM author WHERE author_id = $a_id ORDER BY birth, last"; $author_list = mysql_query($query2) or die ("Error in query: $query2 . " . mysql_error()); if (mysql_num_rows($author_list) > 0) { This worked -- my list includes only the authors who actually have books entered (and the subsequent code listing the books works, too), but my "ORDER BY" won't work no matter what I put into it ("birth" is birth year and "last" is last name in the "author" table). If I comment out my first query ($query1), the ORDER BY works, but then I have not only authors with no books associated with them (in the link table), I also have them listed many times. I thought I'd figured out the hard part (distinct authors), but I don't understand why my ORDER BY doesn't work? Is there a more elegant way (that works <g>) to accomplish my goal? Thank you for any help. | |||
|
| Advertisements |
| | #2 | ||
| On Jun 2, 5:13 pm, BlueBrooke wrote: > Hi -- > > I have three tables: one for authors, one for books, and a link table > linking the author_id with the book_id. > > I want to list first each author and then their books, excluding > authors that don't yet have books entered. > > I did this: > > // Only want to list authors that actually have books in the library > $query1 = " > SELECT DISTINCT author_id > FROM source_author"; > $author_ids = mysql_query($query1) or die ("Error in query: $query1 . > " . mysql_error()); > if (mysql_num_rows($author_ids) > 0) { > while(list($a_id) = mysql_fetch_row($author_ids)) { > > // Get list of authors' names and dates > $query2 = " > SELECT * > FROM author > WHERE author_id = $a_id > ORDER BY birth, last"; > $author_list = mysql_query($query2) or die ("Error in query: $query2 . > " . mysql_error()); > if (mysql_num_rows($author_list) > 0) { > > This worked -- my list includes only the authors who actually have > books entered (and the subsequent code listing the books works, too), > but my "ORDER BY" won't work no matter what I put into it ("birth" is > birth year and "last" is last name in the "author" table). > > If I comment out my first query ($query1), the ORDER BY works, but > then I have not only authors with no books associated with them (in > the link table), I also have them listed many times. > > I thought I'd figured out the hard part (distinct authors), but I > don't understand why my ORDER BY doesn't work? Is there a more > elegant way (that works <g>) to accomplish my goal? > > Thank you for any help. Why are there two queries? tables: author(author_id*,f_name,l_name,dob) - where dob uses the DATE datatype book(book_id*,book) author_book(author_id*,book_id*) SELECT DISTINCT ( a.author_id ), f_name, l_name, dob FROM author a JOIN author_book ab ON a.author_id = ab.author_id ORDER BY dob, l_name | |||
|
| | #3 | ||
| On Sat, 02 Jun 2007 18:10:17 -0000, strawberry <zac.carey@gmail.com> wrote: >On Jun 2, 5:13 pm, BlueBrooke wrote: >> Hi -- >> >> I have three tables: one for authors, one for books, and a link table >> linking the author_id with the book_id. >> >> I want to list first each author and then their books, excluding >> authors that don't yet have books entered. >> >> I did this: >> >> // Only want to list authors that actually have books in the library >> $query1 = " >> SELECT DISTINCT author_id >> FROM source_author"; >> $author_ids = mysql_query($query1) or die ("Error in query: $query1 . >> " . mysql_error()); >> if (mysql_num_rows($author_ids) > 0) { >> while(list($a_id) = mysql_fetch_row($author_ids)) { >> >> // Get list of authors' names and dates >> $query2 = " >> SELECT * >> FROM author >> WHERE author_id = $a_id >> ORDER BY birth, last"; >> $author_list = mysql_query($query2) or die ("Error in query: $query2 . >> " . mysql_error()); >> if (mysql_num_rows($author_list) > 0) { >> >> This worked -- my list includes only the authors who actually have >> books entered (and the subsequent code listing the books works, too), >> but my "ORDER BY" won't work no matter what I put into it ("birth" is >> birth year and "last" is last name in the "author" table). >> >> If I comment out my first query ($query1), the ORDER BY works, but >> then I have not only authors with no books associated with them (in >> the link table), I also have them listed many times. >> >> I thought I'd figured out the hard part (distinct authors), but I >> don't understand why my ORDER BY doesn't work? Is there a more >> elegant way (that works <g>) to accomplish my goal? >> >> Thank you for any help. > > >Why are there two queries? > >tables: >author(author_id*,f_name,l_name,dob) - where dob uses the DATE >datatype > >book(book_id*,book) > >author_book(author_id*,book_id*) > >SELECT DISTINCT ( >a.author_id >), f_name, l_name, dob >FROM author a >JOIN author_book ab ON a.author_id = ab.author_id >ORDER BY dob, l_name I could have sworn I tried that last night -- I spent most of yesterday and this morning trying to accomplish this with one query, but couldn't get it to work. It works beautifully -- thank you so much. | |||
|
| Featured Websites | ||||
|
![]() |
| Tags: order, sort |
| Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
| Thread Tools | |
| Display Modes | |
| |
Similar Threads | ||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| SQL Sort by date | Lee | Database | 12 | 07-01-2007 9:32 PM |
| PHP Search sort help please | M.E. | PHP | 2 | 07-01-2007 5:31 PM |
| sort order | Kurt Milligan | PHP | 2 | 07-01-2007 3:35 PM |
| How do I sort This array? | Karl McAuley | PHP | 1 | 07-01-2007 3:18 PM |
| Does the PS3 have any sort of buzz about it being hot or a must have? | Penguin Commandos for Gore. | Computer Consoles | 14 | 05-30-2007 10:03 PM |
| Featured Websites | ||||
|