2016-10-28 8 views
1

Ich habe eine Tabelle mit dem Namen user_meta. In dieser Tabelle habe ich die folgenden Spalten: ID, userID, meta_key, meta_valueMYSQL Wählen Sie aus Tabellen basierend auf mehreren Zeilen

Ich habe eine andere Tabelle users genannt, die einzige wichtige Säule gibt es ID, das ich die user_meta Tabellenzeilen vergleichen möge.

Die users Tabelle wie folgt aussieht:

ID | email | etc... 
1  | [email protected] | 
5  | [email protected] | 
6  | .... | 
7  | .... | 

Also sage ich eine Tabelle (user_meta) haben, die wie folgt aussieht:

ID | userID | meta_key | meta_value 
2 | 1  | companyID | 2 
3 | 1  | user_type | staff 
4 | 5  | companyID | 2 
5 | 5  | user_type | staff 
6 | 6  | companyID | 4 
7 | 6  | user_type | customer 

ich für jede userID eine einzelne Zeile abrufen möchten, aber nur wenn die Firmen-ID und der Benutzertyp korrekt sind.

Ich möchte alle Benutzer abrufen, die dieselbe FirmaID haben, die ich in der Abfrage senden würde, sagen wir also $ companyID = 2, und dann alle Benutzer, die die user_type = 'Mitarbeiter' haben.

Also muss user_meta.userID gleich users.ID sein, und user_meta.companyID muss gleich 2 sein, und user_meta.user_type muss gleich 'personal' sein.

Ich möchte eine Liste aller Benutzer, die diese Kriterien erfüllen.

Ein Ergebnis wäre 5 zurückgegeben werden. Sie haben beide companyID = 2, und beide haben user_type = staff

+0

die Tabellenstruktur dieser Tabellen beide bieten und auch das gewünschte Ergebnis aus Ihrem Beispiel kam Daten – Beginner

+0

@NewbeeDev ich die Benutzer-Tabelle hinzugefügt, ist die einzige wichtige Säule ID. users.ID = user_meta.userID –

+0

Vielleicht ist ein Ergebnis Ihre gewünschte Abfrage würde uns helfen, Ihr Problem mehr zu verstehen. – Beginner

Antwort

3

Sie müssen sich mit user_meta einmal beitreten für jedes Attribut Sie passen möchten.

SELECT u.* 
FROM users AS u 
JOIN user_meta AS m1 ON u.id = m1.userID 
JOIN user_meta AS m2 ON u.id = m2.userID 
WHERE m1.meta_key = 'companyID' AND m1.meta_value = :companyID 
AND m2.meta_key = 'user_type' AND m2.meta_value = 'staff' 
+0

Das scheint zu funktionieren, wie ich wollte .. Ich werde die Codierung abschließen, um sicherzustellen, dass. Vielen Dank! –

0
SELECT `users`.`id`, 
     `Company`.`meta_value`, 
     `UserType`.`meta_value` 
FROM `users` 
     JOIN `user_meta` `Company` 
     ON `Company`.`userid` = `users`.`id` 
     JOIN `user_meta` `UserType` 
     ON `UserType`.`userid` = `users`.`id` 
WHERE `UserType`.`meta_value` = 'staff' 
     AND `Company`.`meta_value` = 2 

https://gyazo.com/de8d9124418f65b993d708c80c309325

0

Nicht sehr sicher über Ihre Frage. Ich gehe davon aus das ist, was Sie wollen, können:

select * from Users where ID in (
select userID from user_meta where (meta_key = 'companyID' and meta_value = 2) or (meta_key = 'user_type' and meta_value = 'staff') 
); 
+1

Dies wird jeder, der entweder in Unternehmen 2 oder Mitarbeiter ist, erhalten, es erfordert nicht, sie beide zu sein. – Barmar

+0

@Barmar Ach ja, du hast Recht. Ich habe die Frage nicht richtig bekommen –

+0

@PremRaj ja danke für Ihren Versuch, ich weiß, die Frage ist ein bisschen verwirrend. –

Verwandte Themen