1

私には独特の状況があります。その場で SQl を生成し、それを mySQL データベースに対して実行する関数があります。これは、SQL クエリを段階的に構築するもので、非常に複雑です。

WHERE 句には最大 40 の異なる AND を含めることができます。例えば。

SELECT * FROM TableX   //yea I know  don't search for * ...  trying to save typing on stack.
WHERE  Size = 'Large'
AND color= 'blue'
AND smell = 'stinky'
AND ugly = 'no'
AND brand = 'United'
etc...

最後にORDER BYの行を出します。そのような:

ORDER BY brand

私の課題は、ORDER BY some stringを使用してのみ注文できることです。プライマリ テーブルからデータを並べ替えたい場合、これは問題なく機能します。しかし、関連テーブルから出てきた場合はどうすればよいでしょうか?

次のスキーマがあるとします。

CREATE  TABLE `Trucks` (
  `ID` INT NOT NULL AUTO_INCREMENT ,
  `Make` VARCHAR(45) NULL ,
  `Current_PartList_ID` INT NULL ,
  PRIMARY KEY (`ID`) );

INSERT INTO `Trucks` (`Make`, `Current_PartList_ID`) VALUES ('Volvo', '1');
INSERT INTO `Trucks` (`Make`, `Current_PartList_ID`) VALUES ('Volvo', '2');
INSERT INTO `Trucks` (`Make`, `Current_PartList_ID`) VALUES ('Mac', '3');
INSERT INTO `Trucks` (`Make`, `Current_PartList_ID`) VALUES ('Mac', '5');
INSERT INTO `Trucks` (`Make`, `Current_PartList_ID`) VALUES ('Daihatsu', '8');
INSERT INTO `Trucks` (`Make`, `Current_PartList_ID`) VALUES ('Volvo', '4');


CREATE  TABLE `Parts_lists` (
  `ID` INT NOT NULL AUTO_INCREMENT ,
  `Carb_Model` VARCHAR(45) NULL ,
  `Carb_date` DATE NULL ,
  `Tire_type` VARCHAR(45) NULL ,
  `Tire_date` DATE NULL ,
  PRIMARY KEY (`ID`) );

INSERT INTO `Parts_lists` (`Carb_Model`, `Carb_date`, `Tire_type`, `Tire_date`) VALUES ('Hirsch', '2012-12-19', 'Toyo', '2013-01-01');
INSERT INTO `Parts_lists` (`Carb_Model`, `Carb_date`, `Tire_type`, `Tire_date`) VALUES ('HIrsch', '2013-02-14', 'Goodyear', '2011-03-16');
INSERT INTO `Parts_lists` (`Carb_Model`, `Carb_date`, `Tire_type`, `Tire_date`) VALUES ('Bosch', '2011-11-04', 'Toyo', '2013-01-01');
INSERT INTO `Parts_lists` (`Carb_Model`, `Carb_date`, `Tire_type`, `Tire_date`) VALUES ('Miller', '2009-10-11', 'Toyo', '2010-04-17');
INSERT INTO `Parts_lists` (`Carb_Model`, `Carb_date`, `Tire_type`, `Tire_date`) VALUES ('Bosch', '2011-01-07', 'Goodyear', '2013-01-06');
INSERT INTO `Parts_lists` (`Carb_Model`, `Carb_date`, `Tire_type`, `Tire_date`) VALUES ('Bosch', '2012-09-16', 'Lamb', '2012-06-25');
INSERT INTO `Parts_lists` (`Carb_Model`, `Carb_date`, `Tire_type`, `Tire_date`) VALUES ('Miller', '2011-07-22', 'Unknown', '2012-04-07');
INSERT INTO `Parts_lists` (`Carb_Model`, `Carb_date`, `Tire_type`, `Tire_date`) VALUES ('Davis', '2009-03-09', 'Hawking', '2012-06-16');
INSERT INTO `Parts_lists` (`Carb_Model`, `Carb_date`, `Tire_type`, `Tire_date`) VALUES ('Sanno', '2010-01-07', 'Goodyear', '2009-07-16');
INSERT INTO `Parts_lists` (`Carb_Model`, `Carb_date`, `Tire_type`, `Tire_date`) VALUES ('Thrust', '2012-11-11', 'Lamb', '2004-04-08');

私は取得したい:

SELECT * FROM トラック WHERE Make = 'volvo' ORDER BY (*Parts_List.Carb_date*)

したがって、私に次の選択を与えます

ID    Make      (why)
6     Volvo     (Because the Carb_date is 2009-10-11)
1     Volvo     (Because the Carb_date is 2012-12-19)
2     Volvo     (Because the Carb_date is 2013-02-14)

非常に明確にするために:私は立ち往生しています:次のテキスト(私はそれをまったく編集できません:古風な醜いアプリを完全に書き直す必要はありません):

SELECT * FROM Trucks WHERE Make = 'volvo' ORDER BY

XXXXXXX の文字列が必要です

SELECT * FROM Trucks WHERE Make = 'volvo' ORDER BY   XXXXXXX
4

1 に答える 1