Тема: Половина значень поля в одне поле, а інша половина в інше поле

Ось цікава задачка, соромно признатися, та не можу вирішити (не питайте практичне значення, краще просто допоможіть)

тобто, нехай маємо:

id | text
----------
1  |  foo
2  |  bar
3  |  spam
4  | ham

то, отримати тра таке:

first_half | second_half
---------------------------------
foo         | spam
bar         | ham

Звісно, без повторів і все-таке.
п.с. "подякую" клацнувши відповідну лінку )

2

Re: Половина значень поля в одне поле, а інша половина в інше поле

Не уловив критерій поділу

Подякували: Master_Sergius1

3

Re: Половина значень поля в одне поле, а інша половина в інше поле

Цікава задачка :)
Я так зрозумів потрібно просто створити дві колонки

1 SELECT `text` AS 'first_half' FROM `My_test` WHERE `id` IN (1,2)

2 SELECT `text` AS 'second_half' FROM `My_test` WHERE `id` IN (3,4)

і потім вивести дві колонки
SELECT 1 , 2

Подякували: Master_Sergius1

4

Re: Половина значень поля в одне поле, а інша половина в інше поле

Ну і нащо вам ці збочення? SQL - мова запитів до реляційної БД. Відношення "foo - spam" в базі немає в жодному вигляді. Якщо треба робити подібні запити - треба змінювати саму БД, а не писати хитровикручені запити.
Але якщо так хочете, то запитуйте половинки (LIMIT) з нумерацією, а потім об'єднуйте по цій нумерації. Як саме робити нумерацію - залежить від вашої СУБД, може, просто row_number(), а може, щось складніше.

Подякували: Master_Sergius2

5

Re: Половина значень поля в одне поле, а інша половина в інше поле

на php (5.4) зробив би щось таке..

$count = $db->query("SELECT COUNT(id) FROM table")->fetch_array()[0]; //кількість записів

$part = ceil($count / 2); //ділимо їх на 2 частини

$data  = $db->query("SELECT * FROM table ORDER by id"); //вибираємо всі записи

$i = 1; //перший запис

while($info = $data->fetch_assoc()) //вивід через ассоціативний масив
{
++$i; //інкремент номера запису

//вибір колонки для запису,якщо менше половини,то пишемо в першу колонку,інакше в другу
$column = ($i < $part) ? 'first_half' : 'second_half';

//записа у відповідну колонку нової таблиці
$db->query("INSERT INTO newtable SET '$column' = '".$info['text']."'  ");
}

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

Подякували: Master_Sergius, Анатолій2

6

Re: Половина значень поля в одне поле, а інша половина в інше поле

koala написав:

Ну і нащо вам ці збочення? SQL - мова запитів до реляційної БД. Відношення "foo - spam" в базі немає в жодному вигляді. Якщо треба робити подібні запити - треба змінювати саму БД, а не писати хитровикручені запити.
Але якщо так хочете, то запитуйте половинки (LIMIT) з нумерацією, а потім об'єднуйте по цій нумерації. Як саме робити нумерацію - залежить від вашої СУБД, може, просто row_number(), а може, щось складніше.

В принципі, це дійсно збочення (Я казав, не питайте про практичне значення). Я просто на одну штуку натрапив віддалено схожу, а тоді майнула думка чи можливо зробити ось таке. Ну, може й не буду забивати собі дурним голову. Всім дякую.