Выбор случайным образом одинаковых выражений

seva2

Партнер PHPClub.ru
Выбор случайным образом одинаковых выражений

Нужно сделать следующее, выташить только те записи которые уникальны по полю what и случайным образом

То есть
id what
1 дада
2 папа
3 дада

То есть в одном случае мне надо получть id = 1 и 2

А в другом 2 и 3

То есть случайным образом по полям которые уникальны

Спасибо за помощь
 

ISV

Новичок
PHP:
$input = array ("дада", "папа", "дада");
$result = array_unique ($input);
print_r($result);
На выходе будет:Array
(
[0] => дада
[1] => папа
)

Про парную случайность не понял смысла в данной случайности, а так применяется
PHP:
 array_unique ()
- удаляет из массива дублирующиеся значения
 

bgm

 
[offtopic]
ISV
Ты хоть понимаешь, что сморозил глупость?
Или ты вообще ничего не понимаешь?
[/offtopic]
 

Paxan

Новичёк
[SQL]
select t1.what, t2.what FROM TEST as t1 LEFT JOIN TEST as t2 ON t1.what != t2.what ORDER BY RAND() LIMIT 1;
[/SQL]
как-то так
 

bgm

 
Paxan
Какое отношение твой ответ имеет к теме топика?
 

ISV

Новичок
bgm

Извини, я жутко тупой и воще ничего не знаю... лучше я воще ничего писать не буду о "Великий гений bgm". Сам бы написал вместо обсиралова что-нить не "глупого". Помог бы человеку.
P.S. Я вообще читаю даже "глупость". Помогает смотреть по-другому на задачи.

-~{}~ 13.07.06 16:25:

Размышления о глупости

В свое время один настойчивый человек написал кода где-то на 20 файлов в среднем по 100 строк. Я сморозил глупость и написал 1 файл только с одним классом не по теме, а по сути.
Это был конструктор не о чем не говорящий, но наводящий.
Так вот в результате этой глупости линейное программирование для моего настойчивого друга кануло в лета.
 

bgm

 
Re: Выбор случайным образом одинаковых выражений

seva2
Если использовать исключительно SQL, то кроме использования временной таблицы решения пока в голову не приходит (не самое изящное решение):
PHP:
//Создаём и заполняем таблицу:
CREATE TABLE `erand` ( `id` INT NOT NULL , `what` VARCHAR( 10 ) NOT NULL );
INSERT INTO `erand` ( `id` , `what` ) VALUES
('1', 'папа'), ('2', 'дада'), ('3', 'папа'), ('4', 'папа'), ('5', 'папа'), ('6', 'дада'), ('7', 'дада'), ('8', 'папа');

// Собственно запрос:
CREATE TEMPORARY TABLE `tmp` SELECT * FROM `erand` ORDER BY RAND();
SELECT `id` FROM `tmp` GROUP BY `what`;
ISV
Я не гений. А ты лишь подтвердил первоначальное мнение о себе.
 

Paxan

Новичёк
bgm
как ни странно - прямое
зачем для этой задачи еще и временная таблица?
 

bgm

 
Paxan
Прочитай внимательно что требуется:
1) Выбрать те ID, которые уникальны по полю WHAT
2) При этом две последовательные выборки должны отличаться случайным образом.

Прочитал? :)
 

Paxan

Новичёк
[чушь]
допёр тока раза с 15-го что ему надо :/
посыпаю голову пеплом
 

bgm

 
Paxan
:) Теперь смотри: а если у нас уникальных значений в поле what не 2 - (`дада`, `папа`), а больше. К примеру (`дада`, `папа`, `мама`, `каша`).
Что твой запрос выдаст? :)
 

ISV

Новичок
И где вообще seva2 ? Для ясности хотелось бы полной картины.

Это напрямую не отвечает поставленной задаче. Может поможет в будущем.
PHP:
require_once ('DB.php'); //using PEAR

function dadapapa ($field) {
	$db = DB::connect('mysql://users:users@localhost/db_1');
	if (PEAR::isError($db)) {
    die ($db->getMessage()); //правильнее в базу или logfile
	}
	
	$db->setFetchMode(DB_FETCHMODE_ASSOC);
	$res =& $db->query('SELECT * FROM dadapapa');
	while ($res->fetchInto($row)) {
		$arr[] = $row[$field];
	}
	
	if (PEAR::isError($res)) {
    die ($res->getMessage()); //правильнее в базу или logfile
	}
	
	$arr_un = array_unique ($arr); //просто неофигенная "глупость"
	$count_arr = count ($arr_un);
	print "<pre>";
	for ($i=0; $i<$count_arr; $i++) {
	shuffle ($arr_un);
	print_r ($arr_un);
	}


	$db->disconnect();	 
}

dadapapa ('what');
P.S. Задача просто не вяжется с некой гипотетической структурой.
 

bgm

&nbsp;
ISV

Уф... Ну подумать-то вдумчиво можешь хоть немного? Неторопясь? :)

1. Ты совершенно не понял смысла задачи.
2. Если решать задачу с помощью PHP, решение будет примерно таким (за исключением служебной работы с базой):
PHP:
$result = mysql_query('SELECT what FROM dadapapa GROUP BY what');
$count = mysql__num_rows ($result);
$output = array();
$result = mysql_query('SELECT * FROM dadapapa ORDER BY RAND()');
while ( ($row = mysql_fetch_assoc($result)) and ($count>count($output) ) {
     $output[ $row['what'] ] = $row['id'];
}
Понятно?
 

ISV

Новичок
bgm

PHP:
 while ( ($row = mysql_fetch_assoc($result)) and ($count>count($output)) ) {
скобку не поставил.

What is mysql__num_rows? Ошибка или уже пошел новый синтаксис доселе мне неизвестный?

PHP:
$result = mysql_query('SELECT what FROM dadapapa GROUP BY what'); 
$count = mysql_num_rows ($result); 
$output = array(); 
$result = mysql_query('SELECT * FROM dadapapa ORDER BY RAND()'); 
while ( ($row = mysql_fetch_assoc($result)) and ($count>count($output)) ) { 
     $output[ $row['what'] ] = $row['id']; 
}
Вот так работает! НО неизвестно устраивает ли это seva2?
 

baev

‹°°¬•
Команда форума
Код:
SELECT * FROM (SELECT * FROM `table` t1 ORDER BY RAND()) t2 GROUP BY `what`
 

ISV

Новичок
bgm

Согласен полностью, что нада выбирать id, по условию seva2. Но делема всей басни такова где же seva2?! Насколько он стал счастливее от этого?
 

bgm

&nbsp;
baev

О! Слишком долгое общение с FireBird-ом - и вот уже забыл про селект фром селет :)
 
Сверху