2012-03-26 4 views
4

그냥 시작해야합니다. 이것은 간단한 것이어야합니다. 특히 1.5 ~ 1.6/1.7/2.5 전환으로 좋은 소스를 찾을 수 없었습니다.Joomla에서 쿼리를 작성하는 다른 방법은 무엇입니까?

구성 요소를 작성하는 등의 문제가 계속 발생하여 구문 문제가 발생합니다. [TYPE 1]

$query->SELECT('u.id as UserID 
    , u.name AS Name 
    , uppi.profile_value AS Hair 
    , uppi2.profile_value AS Height 
    '); 
$query->FROM (' #__users AS u'); 
$query->LEFTJOIN (' #__user_profiles AS uppi ON u.id = uppi.user_id AND uppi.ordering = 1 '); 
$query->LEFTJOIN (' #__user_profiles AS uppi2 ON u.id = uppi2.user_id AND uppi2.ordering = 2 '); 
$query->GROUPBY (' u.id 
    , u.name 
    , uppi.profile_value 
    '); 

또 다른 방법 : [TYPE 2]

$query->SELECT('u.id as UserID 
    , u.name AS Name 
    , uppi.profile_value AS Hair 
    , uppi2.profile_value AS Height 
    ') 
->FROM (' #__users AS u') 
->LEFTJOIN (' #__user_profiles AS uppi ON u.id = uppi.user_id AND uppi.ordering = 1 ') 
->LEFTJOIN (' #__user_profiles AS uppi2 ON u.id = uppi2.user_id AND uppi2.ordering = 2 ') 
->GROUPBY (' u.id 
    , u.name 
    , uppi.profile_value 
    '); 

부분을 혼동 예를 들어

, 여기에 내가 쿼리를 작성하고있어 하나의 방법입니다 둘 다에 대해 "LEFTJOIN"과 같은 mysql 호출은 두 개가 아니라 한 단어입니다. 그렇다면 내가 사용하기를 원한다면 INSERT…ON DUPLICATE KEY UPDATE 나는 완전히 잃어 버렸습니다. 여기

입니다 세 번째 : [TYPE 3]

$query->SELECT('u.id as UserID 
    , u.name AS Name 
    , uppi.profile_value AS Hair 
    , uppi2.profile_value AS Height 
    '); 
$query->FROM (' #__users AS u'); 
$query->JOIN ('LEFT', ' #__user_profiles AS uppi ON u.id = uppi.user_id AND uppi.ordering = 1 '); 
$query->JOIN ('LEFT', ' #__user_profiles AS uppi2 ON u.id = uppi2.user_id AND uppi2.ordering = 2 '); 
$query->GROUPBY (' u.id 
    , u.name 
    , uppi.profile_value 
    '); 
$query->ORDER ('u.name ASC'); 

이것은 내가 만든 쿼리를 본 적이 또 다른 방법입니다하지만 [편집을 할 동작하지 않습니다 - 지금 작업, 감사 @cppl을 !] [유형 4]

$query= "SELECT `u`.`id` as UserID 
    , `u`.`name` AS Name 
    , `uppi`.`profile_value` AS Hair 
    , `uppi2`.`profile_value` AS Height 
FROM `#__users` AS u 
LEFT JOIN `#__user_profiles` AS uppi ON `u`.`id` = `uppi`.`user_id` AND `uppi`.`ordering` = 1 
LEFT JOIN `#__user_profiles` AS uppi2 ON `u`.`id` = `uppi2`.`user_id` AND `uppi2`.`ordering` = 2 
    "; 

나는 N ... 줌라 MVC 튜토리얼과 린다 겪었어요 어느 쪽이든 "여기에 코드가 있습니다. PLOP"을 넘어 실제로이 문제를 해결합니다.

References: 
    --//www.theartofjoomla.com/home/9-developer/135-database-upgrades-in-joomla-16.html 
    --//stackoverflow.com/questions/8467858/joomla-1-7-db-query-does-not-work-when-query-has-an-ampersand 
    --developer.joomla.org/standards/ch03s10.html 
    --forum.joomla.org/viewtopic.php?p=2506722 
    --forum.joomla.org/viewtopic.php?p=1200668 
    --docs.joomla.org/API16:JDatabaseQuery 
    --//fsadventures.com/2011/01/some-basic-joomla-database-call-functions/ 
    --//www.sourcecodester.com/php/3863/updating-multiple-rows-mysql-using-php.html 
    --//stackoverflow.com/questions/7047471/mysql-query-syntax-error 

질문 :

1) 이들 사이에 어떤 차이가 있습니까?

2) 다른 방법보다 한 가지 방법을 사용해야하는 이유가 있습니까?

3) 이들을 구축하는 다양한 방법을 배우기위한 좋은 출처가 있습니까? 나는 수 시간 동안 수색을했으며 포괄적 인 것을 발견하지 못했습니다.

감사합니다.

+0

Joomla에 대해 알지 못하지만 일반적으로 나는 '중복 키 업데이트'를 사용하지 마십시오. 내가 쿼리를 시도하고 예외/오류를 생성하고 두 번째 쿼리와 그 오류에 대한 행동을 선호합니다. 필자는 상당히 다른 ORM과 DBAL 계층을 사용하고 있으며, 그 중 어느 것도 원시 API를 수행하는 데 필요한 원시 SQL 기능으로 되돌려 야하는 API에서이 기능을 지원하지 못했습니다. – prodigitalson

+0

아, 좋은 지적이야! 제가 지금하고있는 일은 그 어느 곳에서도 결코 사용되지 않을 것입니다. 그러나 그것은 제가 배우는 동안 분명히 제가 지킬 것입니다. 감사! – Gisto

답변

2
  1. 당신의 유형은 1, 2 & 3 종류 반면 4는 SQL 문자열에 대한 쿼리를 설정하기 위해 기존의 스타일을 사용하고, 새로운 JDatabaseQuery 객체를 사용하고 있습니다.
  2. 유형 4이 작동하지 않는 경우 SQL 오류가 발생합니까? (당신은 Joomla의 디버그 모드를 켜서 SQL 오류가 앱 프로파일과 함께 버려지도록 할 수 있습니다.)
  3. JDatabaseQuery는 단지 mySQL이 아닌 여러 SQL 데이터베이스를 지원하는 데 필요한 추상화를 제공하기 때문에 $query 오브젝트에는 등 select(), where(), join() 같은 기능 ...
  4. ->leftJoin()leftJoin()라는 JDatabaseQuery 함수에 PHP 호출이므로 하나 개의 단어, 즉해야한다는 것을 기억하십시오. 그것은 두 가지가 될 수 없습니다.
  5. leftJoin() 실제로 단지 join('LEFT',$conditions)은 그래서 기능적인 차이보다 가독성 구현 더 호출합니다.
  6. 그래서 1, 2, & 3 유형은 사실상 동일한 가독성을 갖습니다 (예 : IMHO 유형 2 & 3은 유형 1보다 읽기 및 유지 관리가 어렵습니다).

당신은 보인다는 Joomla를위한 모든 온라인 소스를 발견합니다! 설명서, Joomla! 구글 그룹 (CMS Dev, General DevPlatform Dev).

유일한 다른 소스는 앤드류 맴돌이 "Learn the Art of Joomla!"입니다. 나는 Andrew 's 재료를 나 자신으로 사용하지 않고 있었다. 그러나 나는 그것에 관해 많은 좋은 물건을 지난 Joomla라고 들었다! 참석 한 날. 오류를 바탕으로

편집 난 당신이 식별자 u.id 하나의 식별자로 싸여 있기 때문에 그것의 말할 것이다. 다음과 같이 시도하십시오 :

SELECT `u`.`id` AS "UserID" FROM `#__users` AS `u` 
+0

이것은 대단합니다 - 고맙습니다 !! "- 알 수없는 열 '필드 목록'에서 'u.id'1054 JDatabaseMySQLi :: 쿼리가"- – Gisto

+0

에 관한 2) 디버거는 말한다. 나는 아마도''또는''권리가 없다. 나는 몇 가지 다른 변종을 보았고 무엇이 옳았는지 확신 할 수 없었다. 그러나 구식이라면 걱정하지 않을 것입니다. – Gisto

+0

아, 내 편집을 참조하십시오. – Craig