2012-01-12 3 views
1

여러 테이블에서 값을 가져 오는 쿼리가 있습니다. 나는 그들을 shows_date ASC에 의해서만 주문하고 싶다. 나는 어떤 데이터도 출력하지 못하는 것 같다. 내 구문에 문제가 생길 수 있니?PHP 데이터가 올바르게 반환되지 않는 쿼리

$artists = $wpdb->get_results("SELECT * FROM " . GIGPRESS_ARTISTS . " AS a, " . GIGPRESS_SHOWS . " AS s, ORDER BY s.show_date "); 

var_dump($artists); 

foreach($artists as $artist_group) 
{ 
    $shows = $wpdb->get_results("SELECT * 
           FROM " . GIGPRESS_ARTISTS . " AS a, " . GIGPRESS_VENUES . " as v, " . GIGPRESS_SHOWS ." AS s 
           LEFT JOIN " . GIGPRESS_TOURS . " AS t 
            ON s.show_tour_id = t.tour_id 
           WHERE " . $date_condition . " 
            AND show_status != 'deleted' AND s.show_artist_id = " . $artist_group->artist_id . " 
            AND s.show_artist_id = a.artist_id AND s.show_venue_id = v.venue_id " . $further_where . " 
           ORDER BY s.show_date " . $sort . ",s.show_expire " . $sort . ",s.show_time ". $sort . $limit); 
} 

덤프

어레이 (72) {[0] => 객체 (stdClass) # 260 (25) {[ "artist_id"] => 캐릭터 (1) "1"을 반환 [ "artist__name"] => 문자열 (1) "1"[ "show_artist_id"] => 문자열 (14) "Damien Dempsey"[ "artist_order"] => "show_date"] => string (10) "2012-01 년 1 월 1 일에"1 "["show_venue_id "] = -29 "["show_multi "] => 문자열 (1)"0 "["show_time "] => 문자열 (8)"20:30:00 "["show_expire "] => 문자열 (10)"2012-01 "0" "["show_tix_phone "] => 문자열 (0)" "["show_price "] => 문자열 (7)"£ 10.00 "["show_tix_url "] => 문자열 (0) > 문자열 ""0 "["show_status "] => 문자열 (7)"삭제됨 "[문자열] "[show_country"] => NULL [ "show_venue"] => NULL [ "show_venue_url"] "show_tour_restore"] => 문자열 (1) "0"[ "show_address" (2) [ "artist_name"] => 문자열 (1) => 널 (NULL) [ "show_venue_phone"] => NULL} [1] => 오브젝트 (stdClass) # 259 10) "게리 던"[ "artist_order"] => 문자열 (1) "0"[ "show_id"] => 문자열 (1) "1"[ "show_artist_id"] => 문자열 (1) "1"[ " [ "show_date"] => 문자열 (10) "2012-01-29"[ "show_multi"] => 문자열 " > "show_expire"] => 문자열 (10) "2012-01-29"[ "show_price"] = "모든 연령대"(8) "모든 연령대"(8) "모든 연령대" [ "show_notes"] => 문자열 (0) ""[ "show_related"] => 문자열 (1) "0"[ "show_status"] => 문자열 (7) "삭제됨"[ "show_tour_restore"] => 문자열 1 "NULL"[ "show_venue_url"] => NULL [ "show_venue_phone"] "0"[ "show_address"] => NULL [ "show_locale"] => NULL [ "show_country" (19) "London Irish Center"[ "artist_id"] => 문자열 (1) "3"[ "artist_name"] => 문자열 (19) "show_id_id"] => 문자열 (1) "1"[ "show_venue_id"] => 문자열 (1) 1 ""show_tour_id "=> 문자열 (1)"0 "["show_date "] => 문자열 (10)"2012-01-29 "["show_multi "] => 문자열 (1)"0 ""[show_time "] => 문자열 (8)"20:30:00 "["show_expire "] => 문자열 (10)"2012-01-29 "["show_price "] => 문자열 (7)"£ 10.00 "["show_tix_url "] => 스트링 (0)", "["show_tix_phone "] => 스트링 (0)", "["show_ages를 "] => 스트링 (8)"모든 나이 "


Ive는 다음을 시도했습니다

,순서에 관해서 작동하지만, 100 배 멍청한 짓에 대한 각 값을 출력
foreach($artists as $artist_group) { 
     $shows = $wpdb->get_results("SELECT * FROM " . GIGPRESS_ARTISTS . " AS a, " . GIGPRESS_VENUES . " as v, " . GIGPRESS_SHOWS ." AS s LEFT JOIN " . GIGPRESS_TOURS . " AS t ON s.show_tour_id = t.tour_id WHERE " . $date_condition . " AND show_status != 'deleted' ORDER BY s.show_date ASC " . $limit); 

..

+1

'var_dump()'가 반환하는 것은 무엇입니까? – zerkms

+0

오류 메시지가 무엇입니까? foreach 루프를 var_dump하십시오. –

+0

연결에 성공 했습니까? – ngen

답변

0

AS의 후 쉼표, FROM

SELECT * "외부입니다. GIGPRESS_ARTISTS. "AS a,". GIGPRESS_SHOWS.

추가로 당신은 것 s.show_date BY의, ORDER AS "는 WHERE 절을 누락하거나 문 조인.

이 쿼리 (크로스 조인 (모든 공연)와 X를 생산하는 것 모든 밴드) foreach에서 각 밴드/쇼에 대해 한 번이 아니라 시스템의 모든 공연에 대해 한 번씩 각 밴드를 처리하게됩니다.

+0

어떻게 이런 구문 오류로'var_dump'가 데이터를 반환하는지 궁금합니다 : -S – zerkms

0

음, 확실히 결과가 있지만 각 객체가 반환되는 행이며 예상대로 다차원 배열이 아닙니다.

은이 같은 것을 할 수 있어야 오브젝트 내의 데이터를 효율적으로 활용하려면 다음

//initlialise array 
$array = array(); 

//loop through array of objects 
foreach($artists as $row){ 
    $temp_array = array(); 
    $temp_array['artist_id'] = $row->artist_id; 
    $temp_array['artist_name'] = $row->artist_name; 
    .... 
    //add rest of object data to temporary array 
    .... 
    //assign data to main array 
    $array[] = $temp_array; 
} 

이 다음 객체에서 데이터를 얻을 데이터의 다차원 배열을 만들 것입니다. 데이터를 처리해야 할 수도 있습니다. 이는 데이터를 어떻게 사용할지 모르겠으므로 예제 일뿐입니다.

P. zerkms이 말했듯이, 당신이 원한다면 $array[4]->artist_name을 사용하여 데이터에 액세스 할 수 있지만 귀하의 질문에 오해가 있습니다. 그러나 실제로 다차원 배열로 저장해야하는 경우 위의 코드를 사용할 수 있습니다.

첫 번째 SQL 문에 JOIN 조건을 추가해야합니다 (아직 조인하지 않은 경우). 조인 조건을 제공하지 않았을 때 중복 행을 제공하는 데카르트 조인을받지 못합니다. 이렇게하면 100x 행이 동일한 문제가 해결됩니다. 이미 언급 된 ORDER가 SQL 구문 오류를 일으키기 전에 마지막 조건에 필요하지 않은 쉼표도 있습니다.

+0

코드가 다차원 배열을 만들지 않습니다 – zerkms

+0

고맙습니다 @danielWest 제 질문에 추가했습니다 ... – Liam

+0

@zerkms 글쎄요. 배열의 배열. 그러면 $ array [4] [ 'artist_name']을 사용하여 5 번째 항목의 아티스트 이름을 얻을 수 있습니다. –

관련 문제