2013-04-29 3 views
-2

Извините, люди толстые (пожалуйста, извините) У меня есть 3 таблицы MySql с данными. Каждая таблица имеет «общее поле» даты (datestamp). Мне нужно объединить запрос выбора из каждой таблицы и упорядочить массив по «общей» дате. Поле даты в каждой таблице имеет другое имя.
, например. table1 - date is table1_date и т. д.создать массив PHP/mysql

Это не вопрос «присоединения» к выбранным запросам, если только три возможных запроса не могут выполняться как подзапросы?

Поля данных в каждой таблице будут отличаться, поэтому мне нужно создать единый массив, упорядоченный по полям datestamp (desc). Естественно, я могу выбрать запрос для каждой таблицы.

например. array1 будет (я думаю) (я хочу использовать имя поля в качестве ключа внутри массива, следовательно, это ниже)

array = table1_date=>array(//field named => field values //) 
array2 = table2_date=>array(//field named => field values //) 
array3 = table3_date=>array(//field named => field values //) 

я быть «толстым», потому что я могу создать массивы, я могу array_push вместе но могу ли я сортировать по ключу массива datestamp - нет.

Это вероятностный так легко, поэтому я прошу прощения

+0

do u хотите объединить 3 массива? – underscore

+0

По общему полю, вы имеете в виду внешний ключ? По сути, это общая ценность, которая может ссылаться на одну таблицу на другую. – user1104854

+0

Использование метки времени как первичного ключа, как правило, очень плохая идея - 2 вещи могут произойти в одно и то же время. Одна вещь может занять больше секунды. – symcbean

ответ

1

Не уверен, что если я ваша проблема совсем правильно, но почему бы вам не сделать что-то вроде этого:

SELECT t1.*, 
t2.field1, 
t2.field2, 
t3.field1, 
... 
FROM t1 
JOIN t2 
JOIN t3 
ORDER BY t1.dat 

Так что если t1.dat1 = t2.dat2 = t3.dat3, просто выберите один из них в своем запросе (и не выбирайте t2.dat2 или t3.dat3) и закажите свой запрос с этим

2

Вы не говорите много о структуре данных в трех таблицах, но я не вижу причин, по которым вы не можете выполнять сортировку и выбор в грехе gle запрос.

Таблица A - DateField - поля А

Таблица B - DateField - FieldB

Таблица C - DateField - FieldC

теперь вы можете получить данные в одном запросе по-разному. Самое простое было бы что-то вроде

select 
    a.datefield datefield, 
    a.fieldA datafield 
from 
    tablea a 
union 
    select 
    b.datefield, 
    b.fieldB 
    from 
    tableb b 
union 
    select 
    c.datefield, 
    c.fieldB 
    from 
    tablec c 
order by 
    datefield 

Если вы хотите только сортировкой, но не хотят объединения полей Вы можете сделать это, например:

select 
    a.datefield datefield, 
    a.fieldA datafielda 
    null datafieldb 
    null datafieldc 
from 
    tablea a 
union 
    select 
    b.datefield, 
    null 
    b.fieldB 
    null 
    from 
    tableb b 
union 
    select 
    c.datefield, 
    null 
    null 
    c.fieldB 
    from 
    tablec c 
order by 
    datefield 
1

Если у вас уже есть три массива содержащий говорят строки таблиц, можно объединить массивы (merge_array()) и сортировать полученный массив с определенной пользователем функции (usort())

Вот пример :

$array_to_sort = array_merge($array1, $array2, $array3); 

function date_compare($a, $b) 
{ 
    $t1 = strtotime($a['datetime']); 
    $t2 = strtotime($b['datetime']); 
    return $t1 - $t2; 
}  
usort($array, 'date_compare'); 

usort() будет затем перейти к вашему определенному пользователю управлению два элемента массива, в котором вы можете выполнить проверку даты.Проверка вернет разницу, так что результат будет равен 0, если обе даты будут равны, положительное число, если первое ($ a) больше или отрицательно, если второй аргумент ($ b) является больше. usort() использует эту информацию для сортировки массива.

Смежные вопросы