Jag försöker att hämta kolumnen "name" från två olika tabeller, (till en tredje tabell), men jag får inte till det riktigt.
Den tredje tabellen (stores) innehåller:
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`owner` int(10) unsigned NOT NULL,
`company` int(10) unsigned NOT NULL,
`association` int(10) unsigned NOT NULL,
`desc` text NOT NULL,
Poster i stores:
INSERT INTO `stores` (`id`, `owner`, `company`, `association`, `desc`) VALUES
(1, 1, 0, 2, 'text här'),
(2, 1, 33, 0, 'text här');
@ndersMedlem sedan juni 200032 969 inlägg Jag läser och läser, men jag kan inte förstå frågan.
(desc är f.ö. inte alls bra som fältnamn, eftersom det är ett reserverat ord. )
@nders skrev:
Jag läser och läser, men jag kan inte förstå frågan.
(desc är f.ö. inte alls bra som fältnamn, eftersom det är ett reserverat ord. )
Tack för tipset ang. "desc", ska ändra detta.
Tabellen "stores" fungerar som en relationstabell mellan "associations" och "companies".
Jag vill nu hämta ut name från både "associations" och "companies".
Har testat med följande fråga:
SELECT *
FROM stores
LEFT JOIN companies ON companies.id = stores.company
LEFT JOIN associations ON associations.id = stores.association
..den fungerar direkt i phpmyadmin, men vet inte riktigt hur jag plockar ut name. :r
@ndersMedlem sedan juni 200032 969 inlägg SELECT companies.name as CompanyName, associations.name as AssociationName, *
FROM stores
LEFT JOIN companies ON companies.id = stores.company
LEFT JOIN associations ON associations.id = stores.association
Referera sedan till CompanyName resp. AssociationName.
Ok, jag förstår det, men är ändå osäker på hur jag ska få till det i följande kod.
$menu = "<option value='0'>---- Välj butik ----</option>\n";
$ct_r = mysql_query("SELECT * FROM stores LEFT JOIN companies ON companies.id = stores.company LEFT JOIN associations ON associations.id = stores.association") or die(mysql_error());
while ($ct_a = mysql_fetch_array($ct_r))
$menu .= "<option value=\"" .intval($ct_a["id"]). "\">" .htmlspecialchars($ct_a["name"]). "</option>\n";
@ndersMedlem sedan juni 200032 969 inlägg Vad är problemet? Ändra SQL-frågan efter mitt förslag, och referera till $ct_a["AssociationName"] resp. $ct_a["CompanyName"] istället för $ct_a["name"].
Hmm.. går det inte att ha ett "samlat" namn för båda? *svårt att förklara*
Min nuvarande kod, ger följande:
<option value='0'>---- Välj butik ----</option>
<option value="2">Föreningsnamn</option>
<option value="0"></option>
..allstå verkar inte någon data hämtas från tabellen "companies"?
(Det finns 2 butiker i "stores", 1 förening och ett företag.)
@ndersMedlem sedan juni 200032 969 inlägg Öh, va? Du får berätta vad du håller på med - vi kan inte läsa i din hjärna.
Med en join får du ut två olika fält. Fundera på om du ska ha en UNION istället.
Men hur ska du hantera "id"? Hur tänkte du hålla koll på vad som är en "association" och vad som är ett "company"? Varför är det olika tabeller? Vad är det för skillnad på "company" och "association"?
@nders skrev:
Öh, va? Du får berätta vad du håller på med - vi kan inte läsa i din hjärna.
Med en join får du ut två olika fält. Fundera på om du ska ha en UNION istället.
Men hur ska du hantera "id"? Hur tänkte du hålla koll på vad som är en "association" och vad som är ett "company"? Varför är det olika tabeller? Vad är det för skillnad på "company" och "association"?
Det är ingen större skillnad på de två tabellerna, mer än att den ena endast innehåller information om företag, och den andra för föreningar.
Resp. ID, hanteras i "stores" med kolumnerna company och association.
@ndersMedlem sedan juni 200032 969 inlägg
Min nuvarande kod, ger följande:
Kod:
<option value='0'>---- Välj butik ----</option>
<option value="2">Föreningsnamn</option>
<option value="0"></option>
..allstå verkar inte någon data hämtas från tabellen "companies"?
Hur menar du att koden ser ut nu då alltså?
Som ovan:
$menu = "<option value='0'>---- Välj butik ----</option>\n";
$ct_r = mysql_query("SELECT * FROM stores LEFT JOIN companies ON companies.id = stores.company LEFT JOIN associations ON associations.id = stores.association") or die(mysql_error());
while ($ct_a = mysql_fetch_array($ct_r))
$menu .= "<option value=\"" .intval($ct_a["id"]). "\">" .htmlspecialchars($ct_a["name"]). "</option>\n";
@ndersMedlem sedan juni 200032 969 inlägg Om du tittar på hur resultatet ser ut (i t.ex. phpmyadmin) så förstår du varför det blir som det blir. Du har två fält med samma namn - och när du försöker hämta värden så hämtas det från "det första" fältet med det namnet. Därför måste du:
- Ange olika namn enligt mitt exempel. Då får du kontrollera med php: är fältet CompanyName inte tomt, visa värdet från det. Är det tomt - visa istället värdet från fältet AssociationName. Eller:
- Se till att SQL-frågan bara har ett fält med namn i - antingen genom en UNION, eller med en CASE i select. Eller:
- Se till att använda EN tabell för "companies" och "associations". Jag kan inte se (med den information du gett hittills) att det finns någon anledning att ha olika tabeller.
Ok! Så du menar alltså att man ska blanda föreningar med företag, i samma tabell?
Hur smart är det, när man sedan vill kunna skilja dem åt?
@ndersMedlem sedan juni 200032 969 inlägg Det är smart.
Om datat är snarlikt finns det ingen anledning att dela på det i olika tabeller. Sätt en flagga bara, en kolumn som kan heta "StoreType" - värde 1 kan vara företag, värde 2 kan vara förening.
@nders skrev:
Det är smart.
Om datat är snarlikt finns det ingen anledning att dela på det i olika tabeller. Sätt en flagga bara, en kolumn som kan heta "StoreType" - värde 1 kan vara företag, värde 2 kan vara förening.
Förstår hur du tänker.
Kanske blir bäst (OCH enklast) att slå ihop de båda tabellerna då. :r
@ndersMedlem sedan juni 200032 969 inlägg Är det stor skillnad på datat som de två olika typerna av "stores" kräver så är det klart att det bör vara olika tabeller. Men man ska akta sig för att dela upp för mycket. Om man gör ett register över datorspel till exempel, då har man ju inte olika tabeller för äventyrsspel, actionspel och sportspel - de lagrar man på samma ställe med någon sorts information om kategori (antingen direkt med en flagga i tabellen eller med poster i en relationstabell).