2012-01-12 3 views
1

У меня есть запрос, который извлекает значения из нескольких таблиц. Я хочу заказать их с помощью show_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"] => string (14) "Damien Dempsey" ["artist_order"] => string (1) "0" ["show_id"] => string (1) "1" ["show_artist_id"] => string (1) "1" ["show_venue_id"] => string (1) "1" ["show_tour_id"] => string (1) "0" ["show_date"] => string (10) "2012-01 -29 "[" show_multi "] => string (1)" 0 "[" show_time "] => string (8)" 20:30:00 "[" show_expire "] => string (10)" 2012-01 -29 "[" show_price "] => string (7)" £ 10.00 "[" show_tix_url "] => string (0)" "[" show_tix_phone "] => string (0)" "[" show_ages "] = > string (8) "All Ages" ["show_notes"] => string (0) "" ["show_related"] => string (1) "0" ["show_status"] => string (7) "deleted" [ "show_tour_restore"] => string (1) "0" ["show_address"] => NULL ["show_locale"] => NULL ["show_country"] => NULL ["show_venue"] => NULL ["show_venue_url"] => NULL ["show_venue_phone"] => NULL} [1] => object (stdClass) # 259 (25) {["artist_id"] => string (1) "2" ["artist_name"] => string (10) «Gary Dunne» ["artist_order"] => string (1) "0" ["show_id"] => string (1) "1" ["show_artist_id"] => string (1) "1" [" show_venue_id "] => string (1)" 1 "[" show_tour_id "] => string (1)" 0 "[" show_date "] => string (10)" 2012-01-29 "[" show_multi "] = > string (1) "0" ["show_time"] => string (8) "20:30:00" ["show_expire"] => string (10) "2012-01-29" ["show_price"] = > строка (7) "£ 10.00" ["show_tix_url"] => строка (0) "" ["show_tix_phone"] => строка (0) "" ["show_ages"] => строка (8) "Все возрасты" ["show_notes"] => string (0) "" ["show_related"] => string (1) "0" ["show_status"] => string (7) "deleted" ["show_tour_restore"] => string (1) «0» [«show_address»] => NULL ["show_locale"] => NULL ["show_country"] => NULL ["show_venue"] => NULL ["show_venue_url"] => NULL ["show_venue_phone"] => NULL} [2] => object (stdClass) # 261 (25) {["artist_id"] => string (1) "3" ["artist_name"] => string (19) "London Irish Center" [ "artist_order"] => string (1) "0" ["show_id"] => string (1) "1" ["show_artist_id"] => string (1) "1" ["show_venue_id"] => string (1) "1" ["show_tour_id"] => string (1) "0" ["show_date"] => string (10) "2012-01-29" ["show_multi"] => string (1) "0 "[" show_time "] => string (8)" 20:30:00 "[" show_expire "] => string (10)" 2012-01-29 "[" show_price "] => string (7)" £ 10.00" [ "show_tix_url"] => строка (0) "" [ "show_tix_phone"] => строка (0) "" [ "show_ages"] => строка (8) "всех возрастов"


Ive попробовал следующее:

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); 

Который работает в отношении упорядочения, но он выводит каждое значение примерно в 100 раз или что-то глупое ..

+1

Что возвращает ваш 'var_dump()'? – zerkms

+0

Какое сообщение об ошибке? var_dump цикл foreach. –

+0

У вас есть успешная связь? – ngen

ответ

0

запятая после AS s, является посторонним

SELECT * FROM ". GIGPRESS_ARTISTS. "AS a,". GIGPRESS_SHOWS. "AS с, ORDER BY s.show_date

дополнительно вы, кажется, отсутствует ИНЕКЕ или JOIN ON заявление.

этот запрос будет производить перекрестное соединение с (все концерты) х (все группы), так что в вашем 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.S. Как говорят zerkms, вы можете получить доступ к данным, используя $array[4]->artist_name, если хотите, но я неправильно понял ваш вопрос. Вы могли бы использовать вышеприведенный код, если вам действительно нужно сохранить его как многомерный массив.

Вам нужно добавить условие JOIN к первому оператору SQL, если вы еще не исправили это, без него вы получите декартовое соединение, которое будет давать вам повторяющиеся строки, поскольку вы не предоставили условия соединения. Это позволит решить проблему наличия 100х строк. Существует также запятая, не требуемая для последнего условия до ЗАКАЗА, о котором уже упоминалось, поскольку это приведет к синтаксической ошибке SQL.

+0

ваш код не создает многомерный массив либо – zerkms

+0

Спасибо @danielWest Я добавил к своему вопросу ... – Liam

+0

@zerkms Ну, это так, как он создает массив массивов. Как вы могли бы затем сделать $ array [4] ['artist_name'], чтобы получить имя исполнителя 5-й записи ... –