dewdo Posted September 18, 2006 Share Posted September 18, 2006 I have a table that has a complete set of labels. I have another table that assigns some labels to some users. I want to create a list that prints the complete set of labels and then says whether it has been assigned to the user or not.table one:label 1 label 2label 3label 4table two:user1 | label 1user2 | label 2desired output: label 1 | user1 | yeslabel 2 | user1 | yeslabel 3 | user1 | nolabel 4 | user1 | noany ideas?thanks Quote Link to comment Share on other sites More sharing options...
Barand Posted September 18, 2006 Share Posted September 18, 2006 I can't help you with your sql as there are no column names, but this looks an identical problem to this onehttp://www.phpfreaks.com/forums/index.php/topic,107845.msg436674.html#msg436674 Quote Link to comment Share on other sites More sharing options...
dewdo Posted September 18, 2006 Author Share Posted September 18, 2006 i dont see how that link gets me there. thanks for searching... Quote Link to comment Share on other sites More sharing options...
Barand Posted September 18, 2006 Share Posted September 18, 2006 [code]<?php$username = 'user1';$sql = "SELECT a.label, b.label FROM `table one` a LEFT JOIN `table two` b ON a.label = b.label AND b.user = '$username'";$res = mysql_query($sql) or die(mysql_error());echo '<pre>';while (list($laba, $labb)=mysql_fetch_row($res)) { $assign = $labb ? 'yes' : 'no'; printf ('%-8s | %-8s | %-4s<br>', $laba, $username, $assign);}echo '</pre>';?>[/code] Quote Link to comment Share on other sites More sharing options...
dewdo Posted September 19, 2006 Author Share Posted September 19, 2006 thank you, that was helpful. If there are three tables [ptypes], [cparties], [eligible]ptypes have all of label1 and cparties have all of label2, eligible matches some of label1 and label2. I need to show a complete list such that there is all ptypes and all cparties and then a yes/no based on what is in eligible .... would this be a union or embedded left join of some sort? Quote Link to comment Share on other sites More sharing options...
dewdo Posted September 19, 2006 Author Share Posted September 19, 2006 $sql = "SELECT DISTINCT tb1.label, tb2.label2 FROM tb1, tb2, tb3 WHERE '(SELECT tb2.label2 FROM tb2 LEFT JOIN tb3 ON tb2.label2 = tb3.label2)'";why wont this work?I am trying to display the entire contents of two tables and then show which of the rows match are recorded together in a third table. Quote Link to comment Share on other sites More sharing options...
Barand Posted September 19, 2006 Share Posted September 19, 2006 Don't know. Don't know you data or table structure. How are the 3 tables related? Quote Link to comment Share on other sites More sharing options...
dewdo Posted September 19, 2006 Author Share Posted September 19, 2006 label2.I am trying to achieve a list where every type of car is shown (table 1), every possible color is shown (table 2) and then a column is inserted that says whether that car comes in that color (table 3). Except, table 3 just has entries where a car does come in that color. I need the results to yes, if its in table three, or no if its not in table three .... Quote Link to comment Share on other sites More sharing options...
Barand Posted September 19, 2006 Share Posted September 19, 2006 So I guess this is what you have?[pre]car (T1) car_color (T3) color (T2)--------- -------------- ----------carID ----- carID +--- colorIDcar_decription colorID ------+ color1 | BMW 525 1 | R R | Red2 | Merc SL500 1 | S G | Green3 | Trabant 2 | S B | Blue 3 | G S | Silver 3 | B[/pre]And this is what you want? [pre] | Red | Green | Blue | Silver |-----------+-------+--------+------+--------+ BMW 525 | Y | | | Y |Merc SL500 | | | | Y |Trabant | | Y | Y | |[/pre] Quote Link to comment Share on other sites More sharing options...
dewdo Posted September 19, 2006 Author Share Posted September 19, 2006 yeah. thats right. Quote Link to comment Share on other sites More sharing options...
Barand Posted September 19, 2006 Share Posted September 19, 2006 If you need help with queries, giving that sort of info in the first place helps us to help you. I'll set up some test tables and see what I can come up with. Quote Link to comment Share on other sites More sharing options...
dewdo Posted September 19, 2006 Author Share Posted September 19, 2006 thanks for helping. i apologize for not spelling it out more clearly earlier in the process. Quote Link to comment Share on other sites More sharing options...
Barand Posted September 19, 2006 Share Posted September 19, 2006 OK. This query will do it.Note that when joining the car and color tables I do not specify a join condition. This combines every value in car table with every value in color table.I then LEFT JOIN to the car_color table so that if a match is found for the car.color combination then cc.carID has a value, but if no match is found then it contains NULL[code]SELECT c.car_desc, co.color, cc.carIDFROM car c INNER JOIN color coLEFT JOIN car_color cc ON c.carID = cc.carID AND co.colorID = cc.colorIDORDER BY c.carID, co.colorID[/code]gives -->[pre]car_desc |color | carID-----------+-------+-------------BMW 525 |Blue |BMW 525 |Green |BMW 525 |Red | 1BMW 525 |Silver | 1Merc SL500 |Blue |Merc SL500 |Green |Merc SL500 |Red |Merc SL500 |Silver | 2Trabant |Blue | 3Trabant |Green | 3Trabant |Red |Trabant |Silver | [/pre] Quote Link to comment Share on other sites More sharing options...
dewdo Posted September 19, 2006 Author Share Posted September 19, 2006 looks like it will work. thanks for the help! Quote Link to comment Share on other sites More sharing options...
dewdo Posted September 25, 2006 Author Share Posted September 25, 2006 that query did not end up working ...i have this structureI have three tablesAllSTypes AllCPS |types| |CPS| type 1 CP 1type 2 CP 2type 3 CP 3type 4 CP 4AllCombo|CPS| |types| |APSID|CP 1 type 2 1CP 2 type 1 2CP 2 type 2 3CP 4 type 3 4I need results that show a full list of Types and CPS and then says whether there is an entry for that combo in AllCombo or not... that part i think we agree on Quote Link to comment Share on other sites More sharing options...
Barand Posted September 25, 2006 Share Posted September 25, 2006 Same basic query different table and field names[code]SELECT t.types, c.cps, IF(m.apsid IS NULL, 'no', 'YES') AS matchedFROM allstypes t INNER JOIN allcps cLEFT JOIN allcombo m ON t.types = m.types AND c.cps = m.cpsORDER BY t.types, c.cps [/code] Quote Link to comment Share on other sites More sharing options...
dewdo Posted September 25, 2006 Author Share Posted September 25, 2006 Incorrect syntax near the keyword 'IF'.Line 1: Incorrect syntax near ','. Quote Link to comment Share on other sites More sharing options...
Barand Posted September 25, 2006 Share Posted September 25, 2006 1 ) are you using MySQL?2 ) post the code you are using as I ran the code prior to posting giving[code]<html><head><title>Query</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body><table border=1 cellspacing=1 cellpadding=0><tr><th>types</th><th>cps</th><th>matched</th></tr><tr><td>type 1</td><td>CP 1</td><td>no</td></tr><tr><td>type 1</td><td>CP 2</td><td>YES</td></tr><tr><td>type 1</td><td>CP 3</td><td>no</td></tr><tr><td>type 1</td><td>CP 4</td><td>no</td></tr><tr><td>type 2</td><td>CP 1</td><td>YES</td></tr><tr><td>type 2</td><td>CP 2</td><td>YES</td></tr><tr><td>type 2</td><td>CP 3</td><td>no</td></tr><tr><td>type 2</td><td>CP 4</td><td>no</td></tr><tr><td>type 3</td><td>CP 1</td><td>no</td></tr><tr><td>type 3</td><td>CP 2</td><td>no</td></tr><tr><td>type 3</td><td>CP 3</td><td>no</td></tr><tr><td>type 3</td><td>CP 4</td><td>YES</td></tr><tr><td>type 4</td><td>CP 1</td><td>no</td></tr><tr><td>type 4</td><td>CP 2</td><td>no</td></tr><tr><td>type 4</td><td>CP 3</td><td>no</td></tr><tr><td>type 4</td><td>CP 4</td><td>no</td></tr></table></body></html>[/code] Quote Link to comment Share on other sites More sharing options...
dewdo Posted September 25, 2006 Author Share Posted September 25, 2006 this is MS SQL. will it not work? Quote Link to comment Share on other sites More sharing options...
Barand Posted September 25, 2006 Share Posted September 25, 2006 Why the **** are you posting in the MySQL forum then?Try[code]SELECT t.types, c.cps, CASE WHEN m.apsid IS NULL THEN 'no' ELSE 'YES' END AS matchedFROM allstypes t INNER JOIN allcps cLEFT JOIN allcombo m ON t.types = m.types AND c.cps = m.cpsORDER BY t.types, c.cps[/code] Quote Link to comment Share on other sites More sharing options...
dewdo Posted September 25, 2006 Author Share Posted September 25, 2006 My apologies, i just replied to my last message on this thread b/c it was a smilar problem. I made the modification you suggested by get "Incorrect syntax near the keyword 'ORDER'." I did a search but did not see the answer ... do you have any thoughts? Quote Link to comment Share on other sites More sharing options...
Barand Posted September 25, 2006 Share Posted September 25, 2006 I can't see an obvious error. I haven't got MS SQL Server on my home PC so I cannot test. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.