засукана join заявка

jack

Registered
Здравейте.Опитвам се да направя следното.
Имам таблица с три колони - id name grad
1. Иван София
2. Лидия Драгоман
и прочие
в друга таблица имам снимките им- id nameid pic
1. 2. lidia.jpg примерно
Как да изведа само тези от град София, които имат снимки?Заявката трябва да е нещо от сорта на - select from table where grad='sofia' limit 0, 5 и от този резултат да извадя id-tata и да мина през втората таблица но на мен дефакто не ми трябва да взимам нищо от там а просто да проверя даден потребител има ли снимка или не- в смисъл айдито му да фигурира и в втората също... щеше да е много просто ако записвах инфото з снимките по хоризонталата напарво в първата таблица, но в случая ен ми върши работа това.
Та яко някой може да даде съвет за правилна заявка и коректна проверка без да изпуши сървъра :cry:
 
jack каза:
Здравейте.Опитвам се да направя следното.
Имам таблица с три колони - id name grad
1. Иван София
2. Лидия Драгоман
и прочие
в друга таблица имам снимките им- id nameid pic
1. 2. lidia.jpg примерно
Как да изведа само тези от град София, които имат снимки?Заявката трябва да е нещо от сорта на - select from table where grad='sofia' limit 0, 5 и от този резултат да извадя id-tata и да мина през втората таблица но на мен дефакто не ми трябва да взимам нищо от там а просто да проверя даден потребител има ли снимка или не- в смисъл айдито му да фигурира и в втората също... щеше да е много просто ако записвах инфото з снимките по хоризонталата напарво в първата таблица, но в случая ен ми върши работа това.
Та яко някой може да даде съвет за правилна заявка и коректна проверка без да изпуши сървъра :cry:

Дай структурата на таблиците и кажи какво точно искаш.
Аз до колото рабзрах не ти трябва join
 
Код:
-- phpMyAdmin SQL Dump
-- version 2.9.2
-- http://www.phpmyadmin.net
-- 
-- Хост: localhost
-- Време на генериране:  февруари 2008 в 15:29
-- Версия на сървъра: 5.0.33
-- Версия на PHP: 5.2.1
-- 
-- БД: `test22`
-- 

-- --------------------------------------------------------

-- 
-- Структура на таблица `images`
-- 

CREATE TABLE `images` (
  `id` int(255) NOT NULL auto_increment,
  `nameid` varchar(255) collate latin1_general_ci NOT NULL,
  `pic` varchar(255) collate latin1_general_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=2 ;

-- 
-- Дъмп (схема) на данните в таблицата `images`
-- 

INSERT INTO `images` VALUES (1, '2', 'lidia.jpg');
INSERT INTO `images` VALUES (2, '3', 'kristina.jpg');

-- --------------------------------------------------------

-- 
-- Структура на таблица `users`
-- 

CREATE TABLE `users` (
  `id` int(255) NOT NULL auto_increment,
  `name` varchar(255) collate latin1_general_ci NOT NULL,
  `grad` varchar(255) collate latin1_general_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=3 ;

-- 
-- Дъмп (схема) на данните в таблицата `users`
-- 

INSERT INTO `users` VALUES (1, 'Ivan', 'Sofia');
INSERT INTO `users` VALUES (2, 'Lidia', 'Dragoman');
INSERT INTO `users` VALUES (3, 'Kristina', 'Sofia');

Искам да изевда всички потребители които са от София и имат снимки. В случая това е Кристина- тя е от софия а в таблицата с изображенията има запис с нейното айди
 
SELECT * FROM table_names, table_images WHERE grad = 'София' AND table_names.id = table_images.nameid

Промени си оцветените неща :?:

ПП. Структурата той я е дал в първия пост.

ПП2. За какво са ви пък php файловете пък сега? Той ви пита за mysql заявка вие php файловете му искате... :shock: :shock: Какво, ще ги крадете ли???? :shock: :shock:
 
StormBreaker каза:
SELECT * FROM table_names, table_images WHERE grad = 'София' AND table_names.id = table_images.nameid

Промени си оцветените неща :?:

ПП. Структурата той я е дал в първия пост.

ПП2. За какво са ви пък php файловете пък сега? Той ви пита за mysql заявка вие php файловете му искате... :shock: :shock: Какво, ще ги крадете ли???? :shock: :shock:

хммм дотук добре, но какво се получава- ето кода ми
Код:
<?php


include("connect.php");

$query="SELECT * FROM users, images WHERE grad='sofia' and images.nameid=users.id ";
$result=mysql_query($query);
$num = mysql_num_rows ($result);
mysql_close();

if ($num > 0 ) {
$i=0;
while ($i < $num) {
$id = mysql_result($result,$i,"id");
$name = mysql_result($result,$i,"name");
//$id = mysql_result($result,$i,"id");

echo "<b>id:</b> $id - $name<br>";

++$i; } } else { echo "prazno"; }?>

Ако кристина има две снимки я изкарва два пъти а трябва само веднъж; а и ако сменим драгоман за лидия и напишем софия, как да задам правилно limit- искам 5 записа от users със снимки, като тези юзери да са уникални а не да се повтарят- с limit 0, 1 важи за цялата заявка и ми вади само първия запис- в случая кристина и дотам- ако не сложа лимит ми вади кристина два пъти и веднъж лидия на която съм присвоил софия за град...
 
Код:
$sql = "SELECT DISTINCT u.id, u.name, i.pic
FROM users u
INNER JOIN images i ON u.id = i.nameid
WHERE u.grad = 'Sofia'
ORDER BY u.id DESC
LIMIT 0,5
";
$result = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_assoc($result)) {
 echo "{$row['id']}  - {$row['name']}<br>";
}

примерно ??
 
lortnoc каза:
Код:
$sql = "SELECT DISTINCT u.id, u.name, i.pic
FROM users u
INNER JOIN images i ON u.id = i.nameid
WHERE u.grad = 'Sofia'
ORDER BY u.id DESC
LIMIT 0,5
";
$result = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_assoc($result)) {
 echo "{$row['id']}  - {$row['name']}<br>";
}

примерно ??
това пак вади Кристина два пъти, тъй като има две нейни снимки- според мен трябва да е нещо с GROUP BY за да ги вади само веднъж...
 
SELECT DISTINCT u.id, u.name, i.pic
FROM users u
INNER JOIN images i ON u.id = i.nameid
WHERE u.grad = 'Sofia'
GROUP BY u.id
ORDER BY u.id DESC
LIMIT 0,5

нямам да тествам, пробвай така!
 
lortnoc каза:
SELECT DISTINCT u.id, u.name, i.pic
FROM users u
INNER JOIN images i ON u.id = i.nameid
WHERE u.grad = 'Sofia'
GROUP BY u.id
ORDER BY u.id DESC
LIMIT 0,5

нямам да тествам, пробвай така!
Да така работи :) Само искам да те попитам- долу при
{$row['id']}
как да взема айдито от първата таблица с потребителите а не от втората с изображенията?пробвах с {$row['u.id']} но не се получава така- присвоява ми айдито на снимката

П.П.аз ще си го викна като {$row['nameid']} то нали е едно и също :).
Благодаря ви на всички найстина :?:
 
Код:
SELECT DISTINCT name FROM table_names, table_images WHERE grad = 'София' AND table_names.id = table_images.nameid

Така ще изкара само по 1 път тези с 2 снимки, обаче няма да можеш да си вземеш id-то.
 

Back
Горе